一、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  可以停止请求的发送

二、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 ,实例化一个下载任务,用于断点续传.

二、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 需要使用代理方法,同时,设置请求头的rang属性

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

最新文章

  1. 【笔记】mysql两条数据的某个属性值互换
  2. 【Beta】第四次任务发布
  3. 合并两个java bean对象非空属性(泛型)
  4. python property
  5. Android和SQLite版本对应关系
  6. Winform开发框架主界面设计展示
  7. jsp学习一
  8. centos7 nginx用systemctl方式管理的脚本
  9. ubuntu中rar与unrar用法详解
  10. android系统体系结构
  11. SQL:deferrable initially deferred
  12. Swift - 使用xib添加新界面
  13. Git 教程(一):简介和安装
  14. Javascript鼠标键盘事件
  15. Django-website 程序案例系列-8 html模板文件详解
  16. cygwin jdk11u
  17. vue代码上传服务器后背景图片404解决方法
  18. BSGS 算法
  19. Dapper-translation 分布式监控系统
  20. [Windows Azure] Development Considerations in Windows Azure SQL Database

热门文章

  1. 【译】x86程序员手册17-第6章保护
  2. 3星|《管理十诫》:十年前可口可乐退休CEO的一生管理经验总结
  3. Cuder - 用C++11封装的CUDA类
  4. HDU_1079_思维题
  5. 浏览器加载 CommonJS 模块的原理与实现 (阮一峰大哥的 http://www.ruanyifeng.com/blog/2015/05/commonjs-in-browser.html)
  6. 关于react框架的一些细节问题的思考
  7. 使用redis和简单token机制校验身份的思路
  8. Linux - redis发布|订阅
  9. springcloud(四):Eureka客户端公共组件打包方式
  10. 【hiho一下 第145周】智力竞赛