從 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

相關文章
相關標籤/搜索