iOSNSURLSession


备注

NSURLSession类和相关类提供用于下载内容的API。此API提供了一组丰富的委托方法,用于支持身份验证,并使您的应用能够在您的应用未运行时执行后台下载,或者在iOS中,在您的应用暂停时执行后台下载。

在较高的层次上, NSURLSession基于会话和任务的概念。任务表示单个URL的单个请求(或单个上载到单个URL)。会话是一组相关请求。

操作系统提供单个预先存在的会话 - 共享会话,它基本上像NSURLConnection一样工作。此外,您可以根据需要在应用中创建自己的会话。

不同的应用以不同的方式使用会话。许多应用程序在启动时创建一个会话,并继续重复使用它。其他应用程序可以从取消一组相关任务中受益(例如,当您关闭选项卡时,Web浏览器会取消所有未完成的请求),从而创建一个会话来保存每组相关请求。

使用NSURLSession的第一步是创建会话配置对象。 (通常)可重用对象包含各种会话设置,您可以根据自己的特定需求进行调整,例如最大并发,每个请求发送的额外标头,是否允许通过蜂窝无线电发送请求(仅限iOS),超时,凭证存储,最小TLS版本,甚至代理设置。

会话配置有三种类型,具体取决于您希望结果会话的行为方式:

  • 默认配置创建的会话与NSURLConnection非常相似。
  • 后台配置创建会话,其中请求在进程外发生,即使应用程序不再运行,也允许下载继续。
  • 临时配置会创建不会将任何内容缓存到磁盘,不将cookie存储到磁盘等的会话,因此适用于隐藏浏览器窗口等内容。

创建后台配置时,必须提供会话标识符,以便稍后重新关联后台会话(如果您的应用程序退出或被操作系统暂停或终止)。您的应用中不得有多个具有相同标识符的会话实例,因此通常情况下,这些配置不可重复使用。可以重用所有其他会话配置以创建任意数量的会话。因此,如果您需要创建具有类似设置的多个会话,则可以创建一次配置,并在每次创建新会话时重复使用它。

创建会话后,您可以在该会话中创建任务。有三种类型的任务:

  • 数据任务将数据作为NSData对象返回。这些适用于一般用途,但在后台会话中不受支持。
  • 下载任务将数据作为磁盘上的文件返回。这些适用于较大的请求,或用于后台会话。
  • 上载任务从NSData对象或磁盘上的文件上载数据。您提供了一个提供POST正文的数据对象或文件。您在任务上提供的正文数据/文件将覆盖NSURLRequest对象中提供的任何正文数据/文件(如果适用)。

这些类型中的每一种都允许您以几种不同的方式获取响应数据 - 通过使用基于块的回调或通过在会话上提供委托并实现委托方法。

此外,NSURLSession允许您提供用于处理身份验证,执行自定义TLS证书处理(包括客户端证书和服务器验证),更改缓存行为等的委托方法。

NSURLSession 相关例子