美文网首页
NSURLSession 与 NSURLConnection 区

NSURLSession 与 NSURLConnection 区

作者: _既白_ | 来源:发表于2019-05-05 20:53 被阅读0次

普通任务和上传

NSURLSession针对下载/上传等复杂的网络操作提供了专门的解决方案,针对普通、上传和下载分别对应三种不同的网络请求任务:NSURLSessionDataTask,NSURLSessionUploadTaskNSURLSessionDownloadTask。创建的task都是挂起状态,需要resume才能启动。

  • 当服务器返回的数据较小时,NSURLSessionNSURLConnection执行普通任务的操作步骤没有区别。
  • 执行上传任务时,NSURLSessionNSURLConnection一样需要设置POST请求的请求体进行上传。

下载任务方式

NSURLConnection下载文件时,先是将整个文件下载到内存,然后再写入到沙盒,如果文件比较大,就会出现内存暴涨的情况。

而使用NSURLSessionUploadTask下载文件,会默认下载到沙盒中的temp文件中,不会出现内存暴涨的情况,但是在下载完成后会把temp中的临时文件删除,需要在初始化任务方法时,在completionHandler回调中增加保存文件的代码。

请求方法的控制

NSURLConnection实例化对象,实例化开始,默认请求就发送(同步发送),不需要调用start方法。而cancel可以停止请求的发送,停止后不能继续访问,需要创建新的请求。

NSURLSession有三个控制方法,取消(cancel)、暂停(suspend)、继续(resume),暂停以后可以通过继续恢复当前的请求任务。

断点续传实现方式

NSURLConnection进行断点下载,通过设置访问请求的HTTPHeaderFieldRange属性,启运行循环,NSURLConnection的代理方法作为运行循环的事件源,接收到下载数据时代理方法就会持续调用,并使用NSOutputStream(或者通过文件指针)管道流进行数据保存。

NSURLSession进行断点下载,当暂停下载任务后,如果 downloadTask(下载任务)为非空,调用 cancelByProducingResumeData:(void (^)(NSData *resumeData))completionHandler这个方法,这个方法接收一个参数,完成处理代码块,这个代码块有一个NSData 参数resumeData,如果 resumeData 非空,我们就保存这个对象到视图控制器的 resumeData属性中。在点击再次下载时,通过调用
[ [self.session downloadTaskWithResumeData: self.resumeData]resume]方法进行继续下载操作。

经过以上比较可以发现,使用NSURLSession进行断点下载更加便捷。

配置信息

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

参考链接

https://www.jianshu.com/p/056b1817d25a

相关文章

网友评论

      本文标题:NSURLSession 与 NSURLConnection 区

      本文链接:https://www.haomeiwen.com/subject/onhdnqtx.html