zoukankan      html  css  js  c++  java
  • iOS-同步下载与异步下载

    一、同步下载(交互不好,容易出现卡死现象,一般下载数据较小或有特定需求才使用)。 发送同步请求后,程序将停止用户交互,直到服务器返回数据完成后,才进行下一步的操作。

    //第一步:创建URL

    NSURL *pURL = [NSURL URLWithString:URL];

    //第二步:创建一个请求

    NSURLRequest *pRequest = [NSURLRequest requestWithURL:pURL cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60];

    //第三步:建立连接

    NSError *pError = nil;

    NSURLResponse *pRespond = nil;

    //向服务器发起请求(发起之后,线程就会一直等待服务器响应,直到超出最大响应时间)

    NSData *pData = [NSURLConnection sendSynchronousRequest:pRequest returningResponse:&pRespond error:&pError];

    //输出获取结果

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

    //输出错误信息

    NSLog(@"pError = %@",[pError localizedDescription]);

    二、异步下载
    异步下载支持应用程序在后台下载数据,在等待下载完成的过程中不会阻塞代码的运行,异步连接步骤如下:
    /*异步请求*/

    //1.获取网络资源路径(URL)

    NSURL *pURL1 = [NSURL URLWithString:URL];

    //2.根据URL创建请求

    NSURLRequest *pRequset1 = [NSURLRequest requestWithURL:pURL1 cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60];

    //3.(与同步请求的区别点)发起请求,通过委托模式回调完成数据获取

    [NSURLConnection connectionWithRequest:pRequset1 delegate:self];

    注意:在异步请求中使用了NSURLConnectionDataDelegate协议,委托对象为自己。其中有四个经常用到的方法,我们将获得的数据放在self.pData中,其类型为 NSMutableData 。

    //1.服务器响应回调的方法

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

    {

    NSLog(@"服务器响应");

    self.pData = [NSMutableData dataWithCapacity:5000];

    }

    //2.服务返回数据,客户端开始接受(data为返回的数据)

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

    {

    NSLog(@"服务器返回数据");

    //将返回数据放入缓存区

    [self.pData appendData:data];

    }

    //3.数据接受完毕回调的方法

    - (void)connectionDidFinishLoading:(NSURLConnection *)connection

    {

    NSLog(@"数据接受完毕");

    NSLog(@"pData = %@",self.pData);

    }

    //4.接受数据失败时候调用的方法

    - (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error

    {

    NSLog(@"数据接受失败,失败原因:%@",[error localizedDescription]);

    }

  • 相关阅读:
    POJ 1731
    POJ 1256
    POJ:1833 按字典序找到下一个排列:
    git工作流
    git 分之合并和冲突解决
    iis 7 操作 .net
    IIS7.0 Appcmd 命令详解
    SQL的注入式攻击方式和避免方法
    实例详解Django的 select_related
    django-ajax之post方式
  • 原文地址:https://www.cnblogs.com/linxiu-0925/p/5224785.html
Copyright © 2011-2022 走看看