NSURLConnection实现异步网络请求

第一步:遵守协议NSURLConnectionDataDelegate

第二步:创建包含请求网址的NSURL类型的对象

NSURL * url = [NSURL URLWithString:PATH];

第三步:创建NSURLRequest请求

NSURLRequest * request = [NSURLRequest requestWithURL:url];

第四步:将request对象赋给NSURLCon对象开始异步请求

 [NSURLConnection connectionWithRequest:request delegate:self];

异步请求代理中3个重要的协议方法

//<1>接收服务器的响应
-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
    NSLog(@"接收服务器的响应");
    //-----------------拓展
    //判断当前服务器的响应状态
    /*
     1   200表示数据请求成功
     2   404表示请求的数据不存在
     3   400 表示客户端请求的语法发生错误
     4    500 服务器端语法发生错误
     
     */
    //NSURLResponse  所有响应对象的父类 其实两个设备之间通信一定要遵守http协议 所以这里的响应对象为NSHTTPURLRequest
    NSHTTPURLResponse * httpRequest = (NSHTTPURLResponse *)response;
    NSInteger status = [httpRequest statusCode];
    NSLog(@"%d",status);//验证什么原因没有请求到数据
    myData.length = 0;//在数据请求下来之前将mydata进行清空,防止对后面的内容造成影响
}
  //NSURLConnection只能用单任务请求,不能进行多任务异步请求。另外两个可以用多任务
    //多个线程并行工作请求数据请求下来的数据都不完整,只能多个线程请求的数据放在一起才算一个完整的数据,所以在这需要将各个data拼接。这也是为什么要声明一个NSMutableData的原因,从服务器中请求下来的数据都是NSdata类型的,用来承载所有线程请求的数据
-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
    NSLog(@"接收请求数据");
    //该方法会被事实调用,直到所有数据请求结束
    [myData appendData:data];//将每个线程请求下来的数据进行拼接
}
//数据解析
-(void)connectionDidFinishLoading:(NSURLConnection *)connection
{
    NSLog(@"数据请求结束");
    //数据解析,解析以后将数据加到UI上
    NSDictionary * dic = [NSJSONSerialization JSONObjectWithData:myData options:NSJSONReadingMutableContainers error:nil];
    NSArray * array = [dic objectForKey:@"users"];
    [_dataSourse addObjectsFromArray:array];
    [self.tableView reloadData];
}
 
原文地址:https://www.cnblogs.com/huoxingdeguoguo/p/4600876.html