网络请求

同步意为着线程阻塞,在主线程中使用此方法会不响应任何用户事件。所以,在应用程序设计时,大多被用在专门的子线程增加用户体验,或用异步请求代替。AD:2014WOT全球软件技术峰会北京站 课程视频发

1. 同步意为着线程阻塞,在主线程中使用此方法会不响应任何用户事件。程序容易出现卡死现象.所以,在应用程序设计时,大多被用在专门的子线程增加用户体验,或用异步请求代替。

NSURL

url,统⼀一资源定位符,也被称为⺴⽹网址,因特⺴⽹网上标准的资源⺴⽹网址

⼀一个典型的url:http://lily:[email protected]/search?hl=en&source=hp&q=mysql&aq=f&oq=&aqi=g10#page

url的符语法: 协议://授权/路径?查询

协议:ftp://(⽂文件传输协议) http://(超⽂文本传输协议)https://(安全超文本传输协议) file://(本地文件协议) 


//网址分为两部分,第一部分:问号之前的内容,即网址所请求的文件按所在的服务器路径,第二部分:问号之后的内容,即向相对文件所传输的参数---针对于GET请求

-(NSData *)startConnect{

    //第一步:准备网址

    NSString *urlStr = @"http://project.lanou3g.com/teacher/yihuiyun/lanouproject/activitylist.php";

    //第二步:将网址进行封装,包含请求方式

    NSURL *url = [NSURL URLWithString:urlStr];

    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];

    //告诉接下来的网络请求连接,这个网络请求是什么样的网络

    [request setHTTPMethod:@"GET"];

    //第三步:连接服务器,同步

    NSURLResponse *response = nil;

    NSData *connection = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:nil];

    //NSLog(@"%@",connection);

    //打印服务器返回信息

    NSHTTPURLResponse *res = (NSHTTPURLResponse *)response;

    NSDictionary *values = res.allHeaderFields;

    NSLog(@"values = %@",values);

    //connection转化为可读的文本,用于分析

    NSString *str = [[NSString alloc]initWithData:connection encoding:NSUTF8StringEncoding];

    NSLog(@"%@",str);

    

    return connection;

}


@implementation ViewController


- (void)viewDidLoad {

    [super viewDidLoad];

    // Do any additional setup after loading the view, typically from a nib.

    [self creat];

}

-(void)creat{

    SyncGet *get = [[SyncGet alloc]init];

    NSData *data =[get startConnect];

    //在网站上数据存放的形式,通过JSON进行解析,根据关键字获取所需要的内容.

    NSMutableDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];

    NSArray *events = [dic objectForKey:@"events"];

    for (NSMutableDictionary *dic1 in events) {

        NSString *adapt_url = [dic1 objectForKey:@"adapt_url"];

        NSLog(@"adapt_url = %@",adapt_url);

    }

}


2. 异步请求的好处是不阻塞当前线程,但相对于同步请求略为复杂,至少要添加两个回调方法来获取异步事件,等待数据返回.

//设置NSURLConnection代理NSURLConnectionDataDelegate

-(void)startConnect:(NSString *)urlStr{

   

    NSURL *url = [NSURL URLWithString:urlStr];

    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];

    //请求方式

    [request setHTTPMethod:@"GET"];

    //连接服务器,异步网络请求,通过协议来完成

    [NSURLConnection connectionWithRequest:request delegate:self];

}

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{

    //获取服务器响应,根据⺴络请求协议,封装了服务器返回数据的部分信息。服务器响应⺴络请求后,返回数据的部分信息及数据本⾝身

    NSLog(@"1");

}

-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{

    //接收数据

    NSLog(@"2");

    //由于网络原因,接受的数据的方法会走很多次,因此需要将每次接受的数据拼接起来

    [_receiveData appendData:data];

    NSLog(@"%@",_receiveData);

}

-(void)connectionDidFinishLoading:(NSURLConnection *)connection{

    //接收完成

    NSLog(@"3");  

}




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章