同步下载 异步下载

异步下载:支持应用程序在后台下载数据,在等待下载完成的过程中不会阻塞代码的运行

同步下载:调用一个方法的时候,如果该方法的返回依赖于它的功能是否完成,则称该方法为同步方法。必须下载完成才能进行下一步。会出现卡壳现象。

同步下载几种形式:

    NSURL *url=[NSURL URLWithString:@"http://www.baidu.com"];  

形式一:

    NSString  *str=[NSString  stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:&error];

形式二:

    NSData * _data =[NSData dataWithContentsOfURL:url]

形式三:

    NSURLRequest *request=[NSURLRequest requestWithURL:url1];

    NSData *data=[NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];

 

 

     异步下载 :

   形式一:

    [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
        NSLog(@"------%d",data.length);
        [data writeToFile:path atomically:YES];

   形式二:

    首先挂出 协议<NSURLConnectionDataDelegate>

   定义全局变量:      

       NSMutableData *_totalData;
       long long _totalLength;

//下载准备

1   NSURL *url=[NSURL URLWithString:@"http://class.room/hdmv.mp4"];
2     NSURLRequest *request=[NSURLRequest requestWithURL:url];
3     NSURLConnection *connection=[[NSURLConnection alloc] initWithRequest:request delegate:self];
4     [connection start];

//实现协议里的方法

//1. 先接受到响应信息,能够知道等下接受的数据是什么样的
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
    //数据有多大
    _totalLength = response.expectedContentLength;
}

//NSFileHandle

//2. 分次接受数据
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{

    [_totalData appendData:data];
  
}

//3. 下载完成
- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
    NSLog(@"finished...");

}

形式二的异步下载还可以以用下图表示:

但是用于多个数据,多个内容下载,机会出现混乱了。所以可以把这个下载方法封装起来,下载几个数据,就用几个对象来下载就可以了。不会出现混乱了。

 

 

  

转载于:https://www.cnblogs.com/lucan727/p/3916593.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值