ios网络开发 同步下载和异步下载
2013-10-29 21:57
309 查看
一、同步下载(交互不好,容易出现卡死现象,一般下载数据较小或有特定需求才使用)。 发送同步请求后,程序将停止用户交互,直到服务器返回数据完成后,才进行下一步的操作。
步骤:
1.创建NSURL
NSURL *url = [[NSURL alloc] initWithString:@"http://www.baidu.com/"];
2.通过URL创建NSURLRequest
NSURLRequest *request = [[NSURLRequest alloc] initWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:15];
cachePolicy 缓存协议是个枚举类型:
NSURLRequestUseProtocolCachePolicy 基础策略
NSURLRequestReloadIgnoringLocalCacheData 忽略本地缓存
NSURLRequestReturnCacheDataElseLoad 首先使用缓存,如果没有本地缓存,才从原地址下载
NSURLRequestReturnCacheDataDontLoad 使用本地缓存,从不下载,如果本地没有缓存,则请求失败。此策略多用于离线操作
NSURLRequestReloadIgnoringLocalAndRemoteCacheData 无视任何的缓存策略,无论是本地还是远程,总是从原地址重新下载
NSURLRequestReloadRevalidatingCacheData 如果本地缓存是有效的则不下载。其他任何情况都从原地址重新下载
3.建立网络连接NSURLConnection,同步请求数据
NSData *receivedData = (NSMutableData *)[NSURLConnection sendSynchronousRwquest:request returningResponse:&response error:&error];
以上三步后,就需要将receivedData进行解析,一般是XML/JSON。
二、异步下载
异步下载支持应用程序在后台下载数据,在等待下载完成的过程中不会阻塞代码的运行,异步连接模型图如下:
对比上篇的同步下载会发现,异步下载发起请求后不会等待接收完成数据,从图中可以看到,异步下载也有三个步骤:
1、客户端向服务器发起请求、服务器端接收请求并解析http参数.
2、应用程序在后台下载数据,在这个过程中不会阻塞客户端运行(可以认为,打开一个下载工具,就不用管了,下载失败或下载完成,会有回调)
3、数据接收完成,如NSURLConnection的异步下载
NSURLConnection同步和异步唯一的不同就是NSURLConnection对象的创建方式、在initWithRequest: degate指定其代理方法时就开始下载,其代理方法能获取整个下载过程,常用的代理方法有:
1、接收完HTTP协议头,开始真正接手数据时候调用,一般在这个方法里初始化一些存储数据的对象如NSMutableData;
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
2、每接收一段数据就会调用此函数,一般在这把data加到NSMutableData对象上
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData*)data
3、接收数据失败时调用,并且中断下载
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
4、最后,如果连接成功并下载,会调用,一般在这释放一些alloc创建的内存
- (void)connectionDidFinishLoading:(NSURLConnection *)connection;
步骤:
1.创建NSURL
NSURL *url = [[NSURL alloc] initWithString:@"http://www.baidu.com/"];
2.通过URL创建NSURLRequest
NSURLRequest *request = [[NSURLRequest alloc] initWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:15];
cachePolicy 缓存协议是个枚举类型:
NSURLRequestUseProtocolCachePolicy 基础策略
NSURLRequestReloadIgnoringLocalCacheData 忽略本地缓存
NSURLRequestReturnCacheDataElseLoad 首先使用缓存,如果没有本地缓存,才从原地址下载
NSURLRequestReturnCacheDataDontLoad 使用本地缓存,从不下载,如果本地没有缓存,则请求失败。此策略多用于离线操作
NSURLRequestReloadIgnoringLocalAndRemoteCacheData 无视任何的缓存策略,无论是本地还是远程,总是从原地址重新下载
NSURLRequestReloadRevalidatingCacheData 如果本地缓存是有效的则不下载。其他任何情况都从原地址重新下载
3.建立网络连接NSURLConnection,同步请求数据
NSData *receivedData = (NSMutableData *)[NSURLConnection sendSynchronousRwquest:request returningResponse:&response error:&error];
以上三步后,就需要将receivedData进行解析,一般是XML/JSON。
二、异步下载
异步下载支持应用程序在后台下载数据,在等待下载完成的过程中不会阻塞代码的运行,异步连接模型图如下:
对比上篇的同步下载会发现,异步下载发起请求后不会等待接收完成数据,从图中可以看到,异步下载也有三个步骤:
1、客户端向服务器发起请求、服务器端接收请求并解析http参数.
2、应用程序在后台下载数据,在这个过程中不会阻塞客户端运行(可以认为,打开一个下载工具,就不用管了,下载失败或下载完成,会有回调)
3、数据接收完成,如NSURLConnection的异步下载
NSURLConnection同步和异步唯一的不同就是NSURLConnection对象的创建方式、在initWithRequest: degate指定其代理方法时就开始下载,其代理方法能获取整个下载过程,常用的代理方法有:
1、接收完HTTP协议头,开始真正接手数据时候调用,一般在这个方法里初始化一些存储数据的对象如NSMutableData;
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
2、每接收一段数据就会调用此函数,一般在这把data加到NSMutableData对象上
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData*)data
3、接收数据失败时调用,并且中断下载
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
4、最后,如果连接成功并下载,会调用,一般在这释放一些alloc创建的内存
- (void)connectionDidFinishLoading:(NSURLConnection *)connection;
相关文章推荐
- ios网络开发 同步下载和异步下载
- ios网络开发 同步下载和异步下载
- ios网络开发 同步下载和异步下载
- iOS网络开发中的同步、异步和请求队列
- iOS 开发 多线程详解之NSThread异步线程下载网络图片
- iOS网络开发中的同步、异步和请求队列
- IOS开发中异步网络请求上实现同步逻辑
- IOS开发之NSURL网络请求,同步异步,GET,POST
- iOS开发:网络请求之get、post同步异步请求
- IOS网络篇10之NSURLConnection的使用(同步异步下载getpost)
- iOS开发之网络编程:同步,异步请求差异及用法
- iOS网络开发中的同步、异步和请求队列
- iOS开发 - 同步异步下载
- iOS开发之网络编程篇三:同步,异步请求差异及用法
- iOS 同步,异步,普通 三种方式下载
- iOS网络开发之:AFNetworking网络访问和下载处理
- iOS网络: NSURLConnection进行同步下载
- iOS开发 -- GET 和 POST请求(同步异步链接)
- iOS开发之网络编程--小文件下载
- iOS开发之网络编程--使用NSURLConnection实现大文件断点续传下载