iOS开发----网络部分---- NSURLConnection和NSURLSession区别及用法
NSURLConnection
作为 Core Foundation / CFNetwork 框架的 API 之上的一个抽象,在 2003 年,随着第一版的 Safari 的发布就发布了。NSURLConnection
这个名字,实际上是指代的 Foundation 框架的 URL 加载系统中一系列有关联的组件:NSURLRequest
、NSURLResponse
、NSURLProtocol
、 NSURLCache
、 NSHTTPCookieStorage
、NSURLCredentialStorage
以及同名类 NSURLConnection
。
NSURLRequest
被传递给 NSURLConnection
。被委托对象(遵守以前的非正式协议 <NSURLConnectionDelegate>
和 <NSURLConnectionDataDelegate>
)异步地返回一个 NSURLResponse
以及包含服务器返回信息的 NSData
。
在一个请求被发送到服务器之前,系统会先查询共享的缓存信息,然后根据策略(policy)以及可用性(availability)的不同,一个已经被缓存的响应可能会被立即返回。如果没有缓存的响应可用,则这个请求将根据我们指定的策略来缓存它的响应以便将来的请求可以使用。
在 2013 的 WWDC 上,苹果推出了 NSURLConnection
的继任者:NSURLSession
。
和 NSURLConnection
一样,NSURLSession
指的也不仅是同名类 NSURLSession
,还包括一系列相互关联的类。NSURLSession
包括了与之前相同的组件,NSURLRequest
与 NSURLCache
,但是把 NSURLConnection
替换成了 NSURLSession
、NSURLSessionConfiguration
以及 NSURLSessionTask
的 3 个子类:NSURLSessionDataTask
,NSURLSessionUploadTask
,NSURLSessionDownloadTask
。
与 NSURLConnection
相比,NSURLsession
最直接的改进就是可以配置每个 session 的缓存,协议,cookie,以及证书策略(credential policy),甚至跨程序共享这些信息。这将允许程序和网络基础框架之间相互独立,不会发生干扰。每个 NSURLSession
对象都由一个 NSURLSessionConfiguration
对象来进行初始化,后者指定了刚才提到的那些策略以及一些用来增强移动设备上性能的新选项。
NSURLSession
中另一大块就是 session task。它负责处理数据的加载以及文件和数据在客户端与服务端之间的上传和下载。NSURLSessionTask
与 NSURLConnection
最大的相似之处在于它也负责数据的加载,最大的不同之处在于所有的 task 共享其创造者 NSURLSession
这一公共委托者(common delegate)。
我们先来深入探讨 task,过后再来讨论 NSURLSessionConfiguration
。