首页 > 代码库 > 同步下载 异步下载
同步下载 异步下载
异步下载:支持应用程序在后台下载数据,在等待下载完成的过程中不会阻塞代码的运行
同步下载:调用一个方法的时候,如果该方法的返回依赖于它的功能是否完成,则称该方法为同步方法。必须下载完成才能进行下一步。会出现卡壳现象。
同步下载几种形式:
NSURL *url=[NSURL URLWithString:@"http://www.baidu.com"];
形式一:
NSString *str=[NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:&error];
形式二:
NSData * _data =http://www.mamicode.com/[NSData dataWithContentsOfURL:url]
形式三:
NSURLRequest *request=[NSURLRequest requestWithURL:url1]; NSData *data=http://www.mamicode.com/[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...");}
但是用于多个数据,多个内容下载,机会出现混乱了。所以可以把这个下载方法封装起来,下载几个数据,就用几个对象来下载就可以了。不会出现混乱了。
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。