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 -- 备忘的更多相关文章

  1. GIS部分理论知识备忘随笔

    文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1.高斯克吕格投影带换算 某坐标的经度为112度,其投影的6度带和3度带 ...

  2. python序列,字典备忘

    初识python备忘: 序列:列表,字符串,元组len(d),d[id],del d[id],data in d函数:cmp(x,y),len(seq),list(seq)根据字符串创建列表,max( ...

  3. Vi命令备忘

    备忘 Ctrl+u:向文件首翻半屏: Ctrl+d:向文件尾翻半屏: Ctrl+f:向文件尾翻一屏: Ctrl+b:向文件首翻一屏: Esc:从编辑模式切换到命令模式: ZZ:命令模式下保存当前文件所 ...

  4. ExtJs4常用配置方法备忘

    viewport布局常用属性 new Ext.Viewport({ layout: "border", renderTo: Ext.getBody(), defaults: { b ...

  5. [备忘] Automatically reset Windows Update components

    这两天遇到Windows 10的更新问题,官方有一个小工具,可以用来修复Windows Update的问题,备忘如下 https://support.microsoft.com/en-us/kb/97 ...

  6. ECMAScript 5(ES5)中bind方法简介备忘

    一直以来对和this有关的东西模糊不清,譬如call.apply等等.这次看到一个和bind有关的笔试题,故记此文以备忘. bind和call以及apply一样,都是可以改变上下文的this指向的.不 ...

  7. MFC通过txt查找文件并进行复制-备忘

    MFC基于对话框的Demo txt中每行一个23位的卡号. 文件夹中包含以卡号命名的图像文件.(fpt或者bmp文件) 要求遍历文件夹,找到txt中卡号所对应的图像文件,并复制出来. VC6.0写的. ...

  8. php 相关模块备忘

    在安装php的时候,不管是编译安装: ./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc -- ...

  9. 『备忘』HttpWebRequest 在 POST 提交时, 标头(Headers)丢失原因

    近来研究 HttpWebRequest —— 辅助类完成时,POST JSON数据 总会 丢失标头(Headers). HttpWebRequest POST JSON数据,分如下几步: > 将 ...

随机推荐

  1. Creating custom datatypes using the umbraco usercontrol wrapper

    本篇文章介绍的是基于UmbracoCMS技术搭建的网站所使用的相关技术. 1.      需求 Umbraco CMS的dataType中有richTexhEditor控件,但是它不是太完善,比如没有 ...

  2. Razor 语法快速参考

    Razor 语法快速参考   本文引自:http://haacked.com/archive/2011/01/06/razor-syntax-quick-reference.aspx 语法名称 Raz ...

  3. winform中如何在TextBox中只能输入数字(可以带小数点)

    可以采用像web表单验证的方式,利用textbox的TextChanged事件,每当textbox内容变化时,调用正则表达式的方法验证,用一个label在text后面提示输入错误,具体代码如下: pr ...

  4. ContentProvider与ContentResolver使用

    例如以下内容为从网络转载: 使用ContentProvider共享数据: 当应用继承ContentProvider类,并重写该类用于提供数据和存储数据的方法,就能够向其它应用共享其数据.虽然使用其它方 ...

  5. 知名IT企业待遇一览表

    115家IT公司待遇一览表       作者是西电通院2013届毕业硕士,依据今年找工作的情况以及身边同学的汇总,总结各大公司的待遇例如以下,吐血奉献,公司比較全.下面绝对是各大公司2013届校招的数 ...

  6. SQL Server与Oracle对比学习:权限管理(一)

    http://blog.csdn.net/weiwenhp/article/details/8093661 我们发现我们现在的生活中到处是涉及到密码,你要记各种各样的密码.比如银行卡,邮件,QQ,微博 ...

  7. [D3] 12. Basic Transitions with D3

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...

  8. Cocos2d-x 3.1.1 学习日志9--一“上一下其乐无穷”游戏开发系列一

    下载地址:http://app.mi.com/search?keywords=%E4%B8%80%E4%B8%8A%E4%B8%80%E4%B8%8B%E5%85%B6%E4%B9%90%E6%97% ...

  9. LabVIEW设计模式系列——普遍使用值改变事件

    标准: 1.当使用值改变事件时,使用单击时触发或者单击时释放开关动作.这样即保证仅仅触发一次,也保证按钮恢复默认值 标准:1.值改变事件的优点:不论是鼠标动作还是键盘动作都能触发值改变事件,增强了程序 ...

  10. linux中的网络通信指令 分类: 学习笔记 linux ubuntu 2015-07-06 16:02 134人阅读 评论(0) 收藏

    1.write write命令通信是一对一的通信,即两个人之间的通信,如上图. 效果图 用法:write <用户名> 2.wall wall指令可将信息发送给每位同意接收公众信息的终端机用 ...