zoukankan      html  css  js  c++  java
  • 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];
    }
     
  • 相关阅读:
    LeetCode:Length of Last Word
    Team Queue(POJ 2259)
    LeetCode:Largest Rectangle in Histogram(update)
    bzoj4821 && luogu3707 SDOI2017相关分析(线段树,数学)
    luogu1438无聊的数列(区间加等差数列,求一个数的和)
    luogu1081 开车旅行2012 D1T3 (倍增,set,O2)
    bzoj4094 && luogu3097 最优挤奶
    luogu3888 GDOI2014拯救莫里斯 (状压dp)
    noip2017D1T3逛公园(拓扑图上dp,记忆化搜索)
    bzoj1065 NOI2008奥运物流 (dp,树上背包,推式子)
  • 原文地址:https://www.cnblogs.com/huoxingdeguoguo/p/4600876.html
Copyright © 2011-2022 走看看