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];
    }
     
  • 相关阅读:
    超硬核Java工程师秋招回忆录+面经汇总,为了拿BAT的研发offer我都做了那些准备?
    使用Prometheus监控Golang服务-基于YoyoGo框架
    Kubernetes Pod OOM 排查日记
    Golang语言排序的几种方式
    设计公共组件需要注意什么
    有关WebSocket必须了解的知识
    docker容器技术
    【SpringBoot】 中时间类型 序列化、反序列化、格式处理
    安装Scrapy的时候报错error: Microsoft Visual C++ 14.0 is required.
    python爬虫学习05-爬取图片
  • 原文地址:https://www.cnblogs.com/huoxingdeguoguo/p/4600876.html
Copyright © 2011-2022 走看看