fighting~

NSURLSession和NSURLConnection的恩怨情

2016-11-13  本文已影响106人  这个年纪的情愫丶

网络请求核心库从iOS7之后已经从NSURLConnection换成了NSURLSession了。那么问题就来了,为什么要换,优点缺点是什么?带着疑问开始追寻。先一张图NSURLSession的框架

cd382768161900551.png

现在AFNetWorking的核心网络请求逻辑就是使用这三个类。

NSURLConnection的缺点一:

直接先来一个苹果文档的解释:
@discussion
The interface for NSURLConnection is very sparse, providing "only****" the controls to start and cancel asynchronous loads of a URL request.

苹果在文档中着重强调'only',不知道没有出NSURLSession的时候有没有only字眼。因为NSURLConnection只有start和cancel,那么cancel之后重新开始呢,你想对了只能重新开始。那问题来了,NSURLSession有什么牛逼之处呢?

NSURLSession优点

NSURLSession的三个方法如下:

  • (void)suspend;
  • (void)resume;
  • (void)cancel;

NSURLConnection的缺点二:

NSURLConnection缓存的官方解释:

NSURLSession缓存的官方解释:

意思就是: NSURLConnection的资源数据在内存NSURLSession的资源数据一个在沙盒,显然NSURLConnection更耗内存。

NSURLConnection的缺点三:

NSURLConnection进行断点下载,通过设置访问请求的HTTPHeaderField的Range属性,开启运行循环,NSURLConnection的代理方法作为运行循环的事件源,接收到下载数据时代理方法就会持续调用,并使用NSOutputStream管道流进行数据保存。
NSURLSession进行断点下载,当暂停下载任务后,如果 downloadTask (下载任务)为非空,调用
cancelByProducingResumeData:(void (^)(NSData *resumeData))completionHandler
这个方法,这个方法接收一个参数,完成处理代码块,这个代码块有一个 NSData 参数 resumeData,如果 resumeData 非空,我们就保存这个对象到视图控制器的 resumeData 属性中。在点击再次下载时,
通过调用
[ [self.session downloadTaskWithResumeData:self.resumeData]resume]
方法进行继续下载操作。经过以上比较可以发现,使用NSURLSession进行断点下载更加便捷。

NSURLConnection的缺点四:

NSURLSession的构造方法(sessionWithConfiguration:delegate:delegateQueue)中有一个 NSURLSessionConfiguration类的参数可以设置配置信息,其决定了cookie,安全和高速缓存策略,最大主机连接数,资源管理,网络超时等配置。NSURLConnection不能进行这个配置,相比于 NSURLConnection 依赖于一个全局的配置对象,缺乏灵活性而言,NSURLSession 有很大的改进了。

NSURLSession可以设置三种配置信息,分别通过调用三个累方法返回配置对象:

上一篇 下一篇

猜你喜欢

热点阅读