NSURLSession
NSURLSession这个类和与其有关联的其他类,提供一个通过HTTP下载的API。这个API提供丰富的代理方法可以让你的app在挂起或者没有运行的时候,在后台下载。
用NSURLSession API,你的app可以创建一系列的session,每一个session协调一组关联的数据转存任务。举个例子:你在协议一个网络浏览器,你的app可以创建为每个tab或每个window创建一个session。在每个session中,你的app添加一系列的任务,每一个任务代表一个指定URL的请求。
三种类型session:default session,其行为跟NSURLSession想象,ephemeral session不在disk上做缓存,download session 它把结果存在一个文件中,并且在app挂起、退出、崩溃的时候仍然继续转存数据。
在这些session中,你可以安排三种类型的任务:data task 获取数据到内存,download task下载一个文件到磁盘,upload task上传一个文件并且在内存中接收相应。
像大多数的网络API一样,NSURLSession是高度异步的,它根据你调用的方法,用一种或两种方法返回数据:
- 一个handler block,当转存完成或者出错的时候,给你的app返回数据。
- 通过调用你自定义的代理,当数据被收到的时候。
- 通过调用方法在自定义的代理上,当下载数据完成。
NSURLSession的API除了传送信息给代理,也提供状态和过程属性。支持取消、重新开始、继续、挂起任务,并且有继续 挂起、取消或者失败的下载的能力。
URL Sessioin Class Hierarchy
NSURLSession API包括下面这些类:
- NSURLSession:一个session对象
- NSURLSessionConfiguration: 初始化session时用得配置对象。
- NSURLSessionTask:session中任务的基类。
- NSURLSessionDataTask:任务用于获取一个URL的内容(作为NSData)。
- NSURLSessionUploadTask:上传文件,接着取回一个URL的内容(作为NSData)。
- NSURLSessionDownloadTask:获取一个URL的内容作为一个临时文件放在磁盘上。
- NSURLSessionDataTask:任务用于获取一个URL的内容(作为NSData)。
除此之外,NSURLSession的API提供了四个协议,你的app可以实现它们的代理方法以对session和task的行为进行更颗粒化(精细)的控制。
- NSURLSessionDelegate:处理session-level事件。
- NSURLSessionTaskDelegate:处理task-level事件,对所有任务类型可用。
- NSURLSessionDataDeleg:处理task-level事件,只对data task和upload task有用。
- NSURLSessionDownloadDelegate:处理task-level事件,只对download task有用。
最后,NSURLSession的API用许多类,这些类也经常和其他API一起用(比如NSURLConnection和NSURLDownload)。
- NSURL:
- NSURLRequest:封装和URL request相关的元数据(metadata),包括URL,request方法,等等。
- NSURLResponse:封装和服务器对请求的响应有关的元数据,比如内容的MIME类型和长度。
- NSHTTPURLResponse:为HTTP request添加额外的,比如响应头。
- NSCachedURLResponse:封装一个NSURLRespo对象(与服务器响应体的真实数据一起),目的是cache。
NSURLSession API需要许多不同的类用相当复杂的方式一起工作,在用之前还是应该看看the URL Loading System来理解这些类之间是怎么交互的。
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。