NSURLSession 和 NSURLConnection 的比较
一、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生成新任务。
NSURLSession 和 NSURLConnection 的比较的更多相关文章
- iOS NSURLSession VS NSURLConnection
NSURLSession VS NSURLConnection NSURLSession可以看做是NSURLConnection的进化版,其对NSURLConnection的改进点有: * 根据每个S ...
- NSURLSession与NSURLConnection区别
1. 使用现状 NSURLSession是NSURLConnection 的替代者,在2013年苹果全球开发者大会(WWDC2013)随ios7一起发布,是对NSURLConnection进 ...
- NSURLSession/NSURLConnection的上传文件方法(已做了更新)
最好的学习方法就是 领悟 + 证悟. 此篇文章的理论基础主要是与HTTP网络通信协议相关.为集中精力,可以先把TCP/IP协议这些置之不理,也就是先只关注HTTP的请求和响应的结构.HTTP完整的原理 ...
- NSURLSession、NSURLConnection
NSURLSesstion GET方法 block回调方法NSString * urlStr = @"http://192.168.1.247:8100/stream?cname=cha_2 ...
- NSURLSession和NSURLConnection
iOS9.0之后NSURLConnection被注销,采用NSURLSession,先介绍NSURLSession,然后介绍NSURLConnection 1.NSURLSession: post请求 ...
- ios NSURLSession(iOS7后,取代NSURLConnection)使用说明及后台工作流程分析
NSURLSession是iOS7中新的网络接口,它与咱们熟悉的NSURLConnection是并列的.在程序在前台时,NSURLSession与NSURLConnection可以互为替代工作.注意, ...
- 从 NSURLConnection 到 NSURLSession
iOS 7 和 Mac OS X 10.9 Mavericks 中一个显著的变化就是对 Foundation URL 加载系统的彻底重构. 现在已经有人在深入苹果的网络层基础架构的地方做研究了,所以我 ...
- NSURLSession使用说明及后台工作流程分析
原文摘自http://www.cocoachina.com/industry/20131106/7304.html NSURLSession是iOS7中新的网络接口,它与咱们熟悉的NSURLConne ...
- iOS开发 GET、POST请求方法(NSURLSession篇)
NSURLConnection,在iOS9被宣布弃用,本文不使用NSURLConnection进行网络编程,有兴趣的童鞋可以参考: [iOS开发 GET.POST请求方法(NSURLConnectio ...
随机推荐
- css图片高清适配
同一张图片,在普通屏显示正常,但高清屏出现模糊.原因是原来一个像素的点分成的四个像素的点进行了显示. 解决方案:在高清屏中把图片变成二倍图,前提是二倍的高清图已经存在. .icon{ backgrou ...
- 【LaTeX】对xelatex的中英文设置不同的字体
不建议用Ctex套装,不好用. 用MixTex+TexStudio! XeTeX处理中文非常方便,不需要任何设置,就能够使用系统中安装的TrueType和OpenType字体. MikTeX2.7中已 ...
- SQL几种常用的函数
函数的种类: 算数函数(数值计算的函数) 字符串函数(字符串操作的函数) 日期函数(用来进行日期操作的函数) 转换函数(用来转换数据类型和值的函数) 聚合函数(用来进行数据聚合的函数) 算数函数(+- ...
- 数组的复制 --System.arraycopy()
import java.util.Arrays; public class HellowWorld { public static void main(String[] argv ) { int[] ...
- 构建秘钥对验证的SSH体系
构建秘钥对验证的SSH 体系 首先先要在ssh 客户端以root用户身份创建秘钥对 客户端将创建的公钥文件上传至ssh服务器 服务器将公钥信息导入用户root的公钥数据库文件 客户端以root用户身份 ...
- 四、Spider用法
本文转载自以下链接: https://scrapy-chs.readthedocs.io/zh_CN/latest/topics/spiders.html https://doc.scrapy.org ...
- js中阻止事件冒泡和浏览器默认行为
在使用javascript编程时会遇到一个问题,就是当你给html添加事件时,由于浏览器默认的为冒泡型事件触发机制,所以会触发你不想触发的事件.那么通过如下的函数可以解决这个问题.[兼容IE和FF] ...
- 新浪微博API生成短链接
通过新浪微博API,生成短链接,支持一次性转多个长链接 什么是短链接 短链接,通俗来说,就是将长的URL网址,通过程序计算等方式,转换为简短的网址字符串. 短链接服务 国内各大微博都推出了自己的短链接 ...
- Navicat premium连接Oracle报ORA-12545错误
1:ORA-12545 原因: 这里填localhost,127.0.0.1,或者远程ip.
- [置顶]
Git学习总结(1)——Git使用详细教程
一:Git是什么? Git是目前世界上最先进的分布式版本控制系统. 二:SVN与Git的最主要的区别? SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而干活的时候,用的都是自己的电脑,所以 ...