NSURLConnection
这个名字,实际上是指代的 Foundation 框架的 URL 加载系统中一系列有关联的组件NSURLRequest,NSURLRsponse,NSURLProtocol,NSURLCache,NSHTTPCookieStorage,NSURLCredentialStorage以及同名类NSURLConnection 。
NSURLRequest被传递给NSURLConnection 。被委托对象(遵守以前的非正式协议 <NSURLConnectionDelegate>和<NSURLConnectinoDataDelegate> )异步地返回一个 以及包含服务器返回信息的 。
请求过程
在一个请求被发送到服务器之前,系统会先查询共享的缓存信息,然后根据策略(policy)以及可用性(availability)的不同,一个已经被缓存的响应可能会被立即返回。如果没有缓存的响应可用,则这个请求将根据我们指定的策略来缓存它的响应以便将来的请求可以使用。
在把请求发送给服务器的过程中,服务器可能会发出鉴权查询(authentication challenge),这可以由共享的 cookie 或机密存储(credential storage)来自动响应,或者由被委托对象来响应。发送中的请求也可以被注册的 NSURLProtocol 对象所拦截,以便在必要的时候无缝地改变其加载行为。
不管怎样,NSURLConnection 作为网络基础架构,已经服务了成千上万的 iOS 和 Mac OS 程序,并且做的还算相当不错。但是这些年,一些用例——尤其是在 iPhone 和 iPad 上面——已经对 NSURLConnection 的几个核心概念提出了挑战,让苹果有理由对它进行重构。
NSURLsession
指的也不仅是同名类 ,还包括一系列相互关联的类。 包括了与之前相同的组件NSURLRequest 与NSURLCache ,但是把 NSURLConnection替换成了NSURLSession,NSURLSessionConfiguration 以及 NSURLSessionTask的 3 个子类:NSURLSessionDataTask,NSURLSessonUploadTask,NSURLSessionDownloadTask。
请求过程
与 NSURLConnection 相比,NSURLsession 最直接的改进就是可以配置每个 session 的缓存,协议,cookie,以及证书策略(credential policy),甚至跨程序共享这些信息。这将允许程序和网络基础框架之间相互独立,不会发生干扰。每个 NSURLSession 对象都由一个 NSURLSessionConfiguration 对象来进行初始化,后者指定了刚才提到的那些策略以及一些用来增强移动设备上性能的新选项。
NSURLSession 中另一大块就是 session task。它负责处理数据的加载以及文件和数据在客户端与服务端之间的上传和下载。NSURLSessionTask 与 NSURLConnection 最大的相似之处在于它也负责数据的加载,最大的不同之处在于所有的 task 共享其创造者 NSURLSession 这一公共委托者(common delegate)。
参考文档: