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
            // 下载完成操作
        }
时间: 2024-08-11 01:25:51

NSURLSession -- 备忘的相关文章

RxJava & RxAndroid备忘

"你问我要去向何方,我指着大海的方向" 今天在刷G+的时候看到Dave Smith推荐了一个视频 <Learning RxJava (for Android) by example> 点进去看了一下,原来是位熟悉的"阿三哥",视频封面如下:(没有歧视的意思,不要喷我啊~,为什么感到熟悉?接着往下看) 几乎同时也看到了JetBrains在G+也推荐了篇在Medium上的博文 <RxAndroid And Kotlin (Part 1)> ,然后

工作备忘:cacti&nagios登录密码修改方法

[[email protected]]# mysql -u root -p mysql> use cacti; mysql> select * from user_auth; mysql> update user_auth set password=md5("cactipasswd") where id='1'; 现在cacti登录的新密码就是cactipasswd [[email protected]]# /usr/bin/htpasswd /usr/local/n

备忘-linux文件系统结构

用apache的时候总是要进入/var/www, 用久了开始好奇这些个目录都是派什么用处的,简单整理了一下 /bin 存放二进制命令文件,这个目录下面不允许存在子目录/boot bootloader的静态文件,当然OS的文件也必须在这里/dev 设备文件,MAKEDEV命令可以创建设备/etc 特定主机的配置文件,必须是静态文件,非可执行文件: opt, X11, sgml, xml/home 用户目录 /lib 存放主要的共享库和核心模块/media 可移除媒体的挂载点: floppy, cd

[转]Windows环境下尝试安装并配置PHP PEAR备忘

转自:http://wangye.org/blog/archives/266/ 什么是PEAR 来自百度百科:PEAR 是PHP扩展与应用库(the PHP Extension and Application Repository)的缩写.它是一个PHP扩展及应用的一个代码仓库,简单地说,PEAR之于PHP就像是CPAN(Comprehensive Perl Archive Network)之于Perl. 由此可见PEAR是PHP代码的仓库,在这里可以找到很多有用的代码,避免我们重复写一些功能,

Table view 备忘

Table view 备忘 本篇会以备忘为主,主要是一些基础的代理方法和数据源方法具体的优化好点子会后续跟上. Table view的数据源方法 必须实现的数据源方法 // 返回每一行的cell,可以做缓存处理,同样也可能会造成复用问题. func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { // tableview 和 cell 都是在s

oracle下 启动subversion命令 及 oracle相关服务启动备忘

linux shell下  svnserve - d -r + 目录   例如:svnserve -d -r /svn 启动 svn服务. 访问svn://192.168.0.120/kjcg 测试. 启动oracle: 一.如何启动数据库实例 1.进入到sqlplus启动实例 [[email protected] ~]$ su - oracle --“切换到oracle用户” 2. Password: [[email protected] ~]$ lsnrctl start  --“打开监听”

linux下常用命令备忘

转自:Linux 命令集锦 linux下查看监听端口对应的进程 # lsof -i:9000 # lsof -Pnl +M -i4 如果退格键变成了:"^h". 终端连接unix删除退格键,按住CTL键同时按delete Linux搜索 # find / -name "xxx.conf" 查看linux是32位还是64位的命令 #file /sbin/init #getconf LONG_BIT #getconf -a 在Linux和Windows下都可以用nslo

PHP设计模式之备忘模式

1.Norton Ghost的方便与问题 我们大多数win的用户都用过Norton Ghost,只要将目前系统备份一下生成镜像文件,等系统中毒或崩溃的时候,用Norton Ghost恢复一下就回到备份时候的样子了. 这个可以说就是备忘(Memento)模式的基本原理了,先备份,需要的时候恢复.因此备忘模式是比较好理解的. 但在实际应用中,如何正确的应用备忘模式,是需要注意的. 难道我们在word写文章的时候,先要Ghost备份一下所有的硬盘,一旦文章写错了,需要恢复,就用Ghost覆盖硬盘? 就

Notepad++ 常用快捷键 (备忘)

最近在学习Lua,用Notepad++ 作为编译器. 今早无意间按下 Ctrl+D ,结果就神奇般的复制并粘贴当行了,突然觉得Notepad++ 这东西很神奇. 网上查找了Notepad++的快捷键,尝试 Ctrl+Q 的时候,小有感慨,这丫太神奇了. 现将Notepad++快捷键做简单记录,备忘用. Ctrl+D    复制并粘贴当行 Ctrl+L     删除当前行 Ctrl+T    上下行交换 Ctrl+W   关闭当前文档 Ctrl+Q    注释/取消注释 Ctrl+Tab