从 NSURLConnection 到 NSURLSession

NSURLConnection

这个名字,其实是指代的 Foundation 框架的 URL 加载系统中一系列有关联的组件NSURLRequest,NSURLRsponse,NSURLProtocol,NSURLCache,NSHTTPCookieStorage,NSURLCredentialStorage以及同名类NSURLConnection缓存

NSURLRequest被传递给NSURLConnection 。被委托对象(遵照之前的非正式协议 <NSURLConnectionDelegate>和<NSURLConnectinoDataDelegate> )异步地返回一个 以及包含服务器返回信息的 。服务器

 

请求过程

在一个请求被发送到服务器以前,系统会先查询共享的缓存信息,而后根据策略(policy以及可用性(availability的不一样,一个已经被缓存的响应可能会被当即返回。若是没有缓存的响应可用,则这个请求将根据咱们指定的策略来缓存它的响应以便未来的请求可使用。cookie

在把请求发送给服务器的过程当中,服务器可能会发出鉴权查询(authentication challenge,这能够由共享的 cookie 或机密存储(credential storage来自动响应,或者由被委托对象来响应。发送中的请求也能够被注册的 NSURLProtocol 对象所拦截,以便在必要的时候无缝地改变其加载行为。网络

无论怎样,NSURLConnection 做为网络基础架构,已经服务了成千上万的 iOS 和 Mac OS 程序,而且作的还算至关不错。可是这些年,一些用例——尤为是在 iPhone 和 iPad 上面——已经对 NSURLConnection 的几个核心概念提出了挑战,让苹果有理由对它进行重构。session

 

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异步

 

参考文档:性能

从 NSURLConnection 到 NSURLSessionspa

相关文章
相关标签/搜索