设为首页 加入收藏

TOP

NSURLConnection & NSRULSession(二)
2017-10-13 10:29:06 】 浏览:9560
Tags:NSURLConnection NSRULSession
们就保存这个对象到视图控制器的 resumeData 属性中。在点击再次下载时,通过调用 [ [self.session downloadTaskWithResumeData:self.resumeData]resume]方法进行继续下载操作。  

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

3      总结

3.1  NSURLConnection的小结

1、iOS2.0出现,iOS9.0后废弃的网络请求发送方式

2、可以在初始化时确定发送同步还是异步的请求,并且可以选择执行队列。

  +(void)sendAsynchronousRequest

  +(nullable NSData *)sendSynchronousRequest: 这里是有返回值的

3、使用NSURLConnection发送异步请求,这样下载大数据会存在问题(要全部加载到内存中,再写入),内存会爆。

4、使用 NSURLConnection 的代理方法 dataDelegate  ,注意:NSURLConnection有多个代理协议,downloadDelegate不好用。

5、NSURLConnection实例化对象,实例化开始,默认请求就发送(同步发送),不需要start。

6、通过代理方法,进行文件的下载操作(大数据),配合NSFileHandle/ NSOutputStream

7、start  没什么卵用

   cancel  可以停止请求的发送

3.2  NSURLSession的小结

1、iOS 7.0/2013,替代NSURLConnection,简单,方便。都是异步发送 

2、实例化NSURLSession对象 

(1)单例:对于简单的,不需要监听网络请求过程的网络会话。

(2)自定义对象:需要监听网络进度,自定义 NSURLSession 对象,并且设置代理。这时还需要一个 NSURLSessionConfiguration,可以设置全局的网络访问属性.

(3)使用代理的注意:

<1>一旦添加了网络完成之后的blcok回调,那么block回调就会被优先执行,代理方法就会失效!

<2>文件下载完毕/网络请求完成之后下载的文件就会从tmp路径中自动删除!

(4)网络任务的具体概念:三种网络任务类型:普通请求(dataTask),文件下载(downloadTask),文件上传(uploadTask)     

(5)关于断点续传:ResumeData

   <1>暂停/取消下载(cancelByProducingResumeData),一旦执行下面取消下载任务的方法,会自动生成一个 resumeData ,就是下次断点续传开始需要的数据!

<2>通过之前下载的数据 ResumeData ,实例化一个下载任务,用于断点续传.

3.3 NSURLConnection和NSURLSession对比

1、前者以在iOS9.0已经被废弃,后者iOS7.0诞生

2、前者可以在初始化时确定发送同步还是异步的请求,并且可以选择执行队列。而后者只能异步发送网络请求(默认子线程执行)。

3、实例化方式不同

(1)前者有类方法,可以不用实例化直接发送同步或异步请求。

(2)后者有单例对象,也可自定义对象。

4、网络任务概念的区别

NSURLSession 采用网络任务的概念:task 来实现网络请求。 一共三种不同的网络任务(普通,上传,下载)

5、关于请求的启动

NSURLSession 默认实例化网络任务后,是挂起的,需要resume

6、使用场景区别: 

(1) 普通的网络任务:服务器返回的是 JSON/XML/HTML 等数据量比较小. 与 NSUrlConnection 的异步网络请求没有任何区别!

(2) 文件上传: 默认NSUrlSession 的文件上传走的是 PUT 请求.文件上传跟 NSUrlConnection 也基本没有区别.   

(3) 文件下载: 如果服务器返回的是一些比较大的数据,NSUrlSession 的下载做的是最好的,封装的非常全面

7、关于下载“大文件”时的不同

(1)  NSUrlConnection 使用dataDelegate监控下载进度,需要配合NSFileHandle 或者 NSOutputStream(文件不存在可以创建)进行数据的存储。

      NSUrlSession 下载使用自己的方法(生成downloadTask,然后resume,在回调中提供数据)

(2)NSURLSession下载完成后,会删除内容(temp文件夹中的文件)

8、关于断点续传的不同

(1)NSUrlConntection 需要使用代理方法,同时,设置请求头的range属性

(2)NSURLSession通过暂停或取消,生成resumeData,需要续传时,根据resumeData生成新任务。

在普通的应用场景下NSURLSession与NSURLConnection相比没有什么优势,但是在程序切换到后台之后Session就显得更加灵活了。

首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇旋转木马效果 下一篇加密

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目