NSURLSession -- 备忘
NSURLSession
NSURLSession是iOS7出的API,在它之前常用的原生网络库是NSURLConnection,但是因为Connection的使用起来不是很方便 所以我们一直倾向于AFNetworking,AFNetworking的确非常强大 但是我们也不该遗忘NSURLSession 因为NSURLSession使用起来也很方便。
NSURLSession的三种工作模式:
- 默认会话模式:这个模式是使用磁盘缓存的持久化策略,使用用户keychain中保存的证书进行认证授权。
 - 瞬时会话模式:这个模式不使用磁盘缓存任何数据,所有的缓存,证书,cookie等都是保存在RAM中的,所以当程序退出时 这些缓存会被清理掉。
 - 后台会话模式:这个模式在后台完成上传下载功能,需要创建Configuration对象
 
NSURLSession的三种任务:
- 请求数据任务
 - 上传文件任务
 - 下载文件任务
 
配置类:NSURLSessionConfiguration
let configuration = NSURLSessionConfiguration.defaultSessionConfiguration()
configuration.allowsCellularAccess = true
configuration.discretionary = true
configuration.timeoutIntervalForRequest = 30.0
configuration.timeoutIntervalForResource = 60.0
configuration.HTTPAdditionalHeaders = ["Accept" : "application/json"]
configuration.HTTPMaximumConnectionsPerHost = 5
初始化类方法:
- NSURLSessionConfiguration.defaultSessionConfiguration():默认工作模式
 - NSURLSessionConfiguration.ephemeralSessionConfiguration():瞬时工作模式
 - NSURLSessionConfiguration.backgroundSessionConfiguration(identifier: String):后台工作模式(iOS7)
 - NSURLSessionConfiguration.backgroundSessionConfigurationWithIdentifier(identifier: String):后台工作模式(iOS8)
 
常用属性:
- allowsCellularAccess:是否允许使用蜂窝网络连接。
 - discretionary:是否允许自由配置,当设置为true的时候 由系统选择最佳的网络连接。在上传和下载任务的时候建议设置为true 因为系统会使用最优的模式进行任务(把WiFi和电量考虑在内)。
 - timeoutIntervalForRequest:规定请求超时时间,如果请求在规定时间内没有被发出,就会超时。
 - timeoutIntervalForResource:规定请求超时时间,如果在指定时间内无法找到请求的资源时,就会超时。
 - HTTPAdditionalHeaders:设置额外的请求头配置。
 - HTTPMaximumConnectionsPerHost:限制最大的网络连接数量
 
NSURLSession
let session = NSURLSession.sharedSession()
let session = NSURLSession(configuration: configuration)
let session = NSURLSession(configuration: configuration, delegate: self, delegateQueue: NSOperationQueue())
三个初始化方法:
- NSURLSession.sharedSession():获取全局共享的会话,将使用全局的缓存,cookie和证书。
 - NSURLSession(configuration: configuration):通过配置对象创建一个session类。
 - NSURLSession(configuration: configuration, delegate: self, delegateQueue: NSOperationQueue()):和第二个方法类似,额外设置了代理和代理线程来相应各种事件
 
NSURLSessionTask
NSURLSessionTask是抽象类,一般使用的是它的三个子类:
- NSURLSessionDataTask:最常用,获取json数据。
 - NSURLSessionUploadTask:主要用于上传文件。
 - NSURLSessionDownloadTask:主要用于下载文件。
 
NSURLSessionDataTask
通过URL创建
let session = NSURLSession(configuration: configuration, delegate: self, delegateQueue: NSOperationQueue())
        let url = NSURL(string: "some request path")
        let task = session.dataTaskWithURL(url!)
/* -------------------------------分割线------------------------------- */
let session = NSURLSession(configuration: configuration, delegate: self, delegateQueue: NSOperationQueue()) let url = NSURL(string: "some request path") let task = session.dataTaskWithURL(url!) { (data, response, error) in // 请求后操作 }
通过URLRequest创建
let session = NSURLSession(configuration: configuration, delegate: self, delegateQueue: NSOperationQueue())
let url = NSURL(string: "some request path")
let request = NSURLRequest(URL: url!)
let task = session.dataTaskWithRequest(request) /* -------------------------------分割线------------------------------- */ let session = NSURLSession(configuration: configuration, delegate: self, delegateQueue: NSOperationQueue())
let url = NSURL(string: "some request path")
let request = NSURLRequest(URL: url!)
let task = session.dataTaskWithRequest(request) { (data, response, error) in
// 请求完成操作
NSURLSessionUploadTask
let task = session.uploadTaskWithStreamedRequest(request)
let task = session.uploadTaskWithRequest(request, fromData: someData)
let task = session.uploadTaskWithRequest(request, fromFile: fileUrl)
let task = session.uploadTaskWithRequest(request, fromData: someData) { (data, response, error) in
// 上传完成操作
}
let task = session.uploadTaskWithRequest(request, fromFile: fileUrl) { (data, response, error) in
// 上传完成操作
}
NSURLSessionDownloadTask
通过URLRequest创建
let downloadTask = session.downloadTaskWithRequest(request)
let downloadTask = session.downloadTaskWithRequest(request) { (url, response, error) in
// 下载完成操作
}
通过URL创建
let downloadTask = session.downloadTaskWithURL(url!)
let downloadTask = session.downloadTaskWithURL(url!) { (url, response, error) in
// 下载完成操作
}
继续下载
let downloadTask = session.downloadTaskWithResumeData(resumeData)
let downloadTask = session.downloadTaskWithResumeData(resumeData) { (url, response, error) in
// 下载完成操作
}
NSURLSession -- 备忘的更多相关文章
- GIS部分理论知识备忘随笔
		
文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1.高斯克吕格投影带换算 某坐标的经度为112度,其投影的6度带和3度带 ...
 - python序列,字典备忘
		
初识python备忘: 序列:列表,字符串,元组len(d),d[id],del d[id],data in d函数:cmp(x,y),len(seq),list(seq)根据字符串创建列表,max( ...
 - Vi命令备忘
		
备忘 Ctrl+u:向文件首翻半屏: Ctrl+d:向文件尾翻半屏: Ctrl+f:向文件尾翻一屏: Ctrl+b:向文件首翻一屏: Esc:从编辑模式切换到命令模式: ZZ:命令模式下保存当前文件所 ...
 - ExtJs4常用配置方法备忘
		
viewport布局常用属性 new Ext.Viewport({ layout: "border", renderTo: Ext.getBody(), defaults: { b ...
 - [备忘] Automatically reset Windows Update components
		
这两天遇到Windows 10的更新问题,官方有一个小工具,可以用来修复Windows Update的问题,备忘如下 https://support.microsoft.com/en-us/kb/97 ...
 - ECMAScript 5(ES5)中bind方法简介备忘
		
一直以来对和this有关的东西模糊不清,譬如call.apply等等.这次看到一个和bind有关的笔试题,故记此文以备忘. bind和call以及apply一样,都是可以改变上下文的this指向的.不 ...
 - MFC通过txt查找文件并进行复制-备忘
		
MFC基于对话框的Demo txt中每行一个23位的卡号. 文件夹中包含以卡号命名的图像文件.(fpt或者bmp文件) 要求遍历文件夹,找到txt中卡号所对应的图像文件,并复制出来. VC6.0写的. ...
 - php 相关模块备忘
		
在安装php的时候,不管是编译安装: ./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc -- ...
 - 『备忘』HttpWebRequest 在 POST 提交时, 标头(Headers)丢失原因
		
近来研究 HttpWebRequest —— 辅助类完成时,POST JSON数据 总会 丢失标头(Headers). HttpWebRequest POST JSON数据,分如下几步: > 将 ...
 
随机推荐
- ACM 关于数据输入加速
			
转载请注明出处:http://blog.csdn.net/a1dark 分析:我们都知道运行时间对我们来说很重要.有时候不惜用大量的内存去换取一点时间.有些人可能都比较关注这个问题.首先时间上:cin ...
 - CentOS下MySQL 5.7编译安装
			
CentOS下MySQL 5.7编译安装 文章目录 安装依赖包 下载相应源码包 添加mysql用户 预编译 编译安装 启动脚本,设置开机自启动 /etc/my.cnf,仅供参考 初始化数据库 设置 ...
 - tuple类型的单词查询例子
			
17.3 重写前面的TextQuery程序,使用tuple代替QueryResult类. TextQuery.h #ifndef TEXTQUERY_H #define TEXTQUERY_H #in ...
 - Day04 - Python 迭代器、装饰器、软件开发规范
			
1. 列表生成式 实现对列表中每个数值都加一 第一种,使用for循环,取列表中的值,值加一后,添加到一空列表中,并将新列表赋值给原列表 >>> a = [0, 1, 2, 3, 4, ...
 - AFNetworking 新版本3.0的迁移
			
AFNetworking在3.0版本中删除了基于 NSURLConnection API的所有支持.如果项目以前使用过这些API,那么我们需要升级到基于 NSURLSession 的API的AFNet ...
 - 配置SSH免密码验证
			
为了防止无良网站的爬虫抓取文章,特此标识,转载请注明文章出处.LaplaceDemon/ShiJiaqi. http://www.cnblogs.com/shijiaqi1066/p/5183803. ...
 - SVN状态图标不显示
			
Windows最多只允许15个覆盖图标,它自己又用了几个,结果给用户用的就11个左右了,如果你安装了其他网盘,那可用的就更少了. 解决方法: 1.在运行里输入regedit进入注册表 2.依次打开HK ...
 - web前端:html
			
一.理解表单的作用 1.web 应用程序不仅仅是给用户显示数据,还应该给用户提供一个可以输入数据的图形用户界面.表单的主要作用在于在网页上提供一个图形用户界面,已采集和提交用户输入的数据. 2.htm ...
 - CSS相对定位、绝对定位
			
CSS定位属性:position. 定位的基本思想:定义元素框相对于其正常位置应该出现的位置,或者相对于父元素.另一个元素或浏览器窗口本身的位置. position属性值:static.relativ ...
 - ubuntu15.10升级时校验和不符的解决方法
			
博客: 安卓之家 微博: 追风917 CSDN: 蒋朋的家 简书: 追风917 博客园: 追风917 # 错误 # 原因分析 进入/var/lib/apt/lists/partial看下吧: 看到了吧 ...