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的内容作为一个临时文件放在磁盘上。

除此之外,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来理解这些类之间是怎么交互的。

原文: NSURLSession Class Reference

你可能感兴趣的:(session)