NSURLSession

  1 iOS 7:NSURLSession
  2         字面理解Session會話控制
  3         而Connection是鏈接,顯然Session比這個Connection要更強大些
  4 
  5 1、NSURLSession簡介(總體認知)
  6     (1).出現
  7 
  8     NSURLConnection做爲一個網絡基礎架構,它已經表現得至關好。它是伴隨着2003年Safari瀏覽器的原始發行版本誕生的,可是,這些年來,iPhone和iPad新興的用例,特別是有一些已經向NSURLConnection的幾個核心設想提出了挑戰,對其重構已經迫在眉睫。
  9     在2013年的WWDC上,Apple揭開了NSURLConnection繼任者的面紗:NSURLSession。
 10     PS:蘋果全球開發者大會,英文全稱是(Apple Worldwide Developers Conference)。簡稱爲「WWDC」。
 11 
 12     (2).特色
 13     NSURLSession與我們熟悉的NSURLConnection是並列的。在程序在前臺時,NSURLSession與NSURLConnection能夠互爲替代工做。注意,若是用戶強制將程序關閉,NSURLSession會斷掉。
 14 
 15     (3).NSURLSession提供的功能:
 16         1.經過URL將數據下載到內存
 17         2.經過URL將數據下載到文件系統
 18         3.將數據上傳到指定URL
 19         4.在後臺完成上述功能
 20 
 21     (4)NSURLSession帶來了這些新的好處:
 22         後臺上傳和下載
 23         能夠暫停和繼續鏈接網絡
 24         保存配置
 25         子類化和私有存儲
 26         改良的認證處理
 27         豐富的代理模型
 28         經過文件系統上傳和下載
 29 
 30 2、相關的類(組成部分)
 31     1.NSURLConnection這個名字,實際上指的是一組構成Foundation框架中URL加載系統的相互關聯的組件:NSURLRequest,NSURLResponse,NSURLProtocol,NSURLCache,NSHTTPCookieStorage,NSURLCredentialStorage,以及和它同名的NSURLConnection。
 32 
 33 
 34     2.NSURLSession也是一組相互依賴的類,它的大部分組件和NSURLConnection中的組件相同如NSURLRequest,NSURLCache等。而NSURLSession的不一樣之處在於,它將NSURLConnection替換爲NSURLSession和NSURLSessionConfiguration,以及3個NSURLSessionTask的子類:NSURLSessionDataTask, NSURLSessionUploadTask, 和NSURLSessionDownloadTask。
 35 
 36     3.與NSURLConnection相比,NSURLSession最直接的改善就是提供了配置每一個會話的緩存,協議,cookie和證書政策(credential policies),甚至跨應用程序共享它們的能力。這使得框架的網絡基礎架構和部分應用程序獨立工做,而不會互相干擾。每個NSURLSession對象都是根據一個NSURLSessionConfiguration初始化的,該NSURLSessionConfiguration指定了上面提到的政策,以及一系列爲了提升移動設備性能而專門添加的新選項。
 37         PS:cookie(小甜餅?)指某些網站爲了辨別用戶身份、進行session跟蹤而儲存在用戶本地終端上的數據(一般通過加密),好讓服務器用來辨認你的計算機(自動登陸、用戶習慣和關注等)。
 38 
 39    4.NSURLSession的另外一重要組成部分是會話任務,它負責處理數據的加載,以及客戶端與服務器之間的文件和數據的上傳下載服務。NSURLSessionTask與NSURLConnection是及其類似的,由於它負責加載數據,而主要的區別在於,任務共享它們父類NSURLSession的共同委託(common delegate)。
 40 
 41 
 42 
 43 3、NSURLSession新推出的類(詳細認知)
 44     1.NSURLSessionConfiguration類
 45         其中NSURLSessionConfiguration用於配置會話的屬性,能夠經過該類配置會話的工做模式
 46         指定NSURLSession的配置信息。這些配置信息決定了NSURLSession的種類,HTTP的額外headers,請求的timeout時間,Cookie的接受策略等配置信息。更多的參見官方文檔。
 47 
 48     2.NSURLSession類
 49         獲取NSURLSession類對象有幾種方式
 50         會話是基於NSURLSession網絡開發的核心組件。由上文的Configuration來配置,而後做爲工廠,建立NSURLSessionTask來進行實際的數據傳輸任務。
 51     3.NSURLSessionTask
 52         實際的Session任務,分爲三種
 53         NSURLSessionTask是一個抽象類,它有三個具體的子類是能夠直接使用的:NSURLSessionDataTask,NSURLSessionUploadTask和NSURLSessionDownloadTask。這三個類封裝了現代應用程序的三個基本網絡任務:獲取數據,好比JSON或XML,以及上傳下載文件。
 54 
 55 
 56 
 57 4、工做流程
 58     利用NSURLSession進行數據傳輸咱們須要:
 59     1.建立一個NSURLSessionConfiguration,用於第二步建立NSSession時設置工做模式和網絡設置:
 60 
 61     工做模式分爲:
 62         通常模式(default):工做模式相似於原來的NSURLConnection,可使用緩存的Cache,Cookie,鑑權。
 63             + (NSURLSessionConfiguration *)defaultSessionConfiguration
 64             defaultSession,使用基於硬盤的持久話Cache,保存用戶的證書到鑰匙串,使用共享cookie存儲
 65 
 66         即時模式(ephemeral):不使用緩存的Cache,Cookie,鑑權。
 67             + (NSURLSessionConfiguration *)ephemeralSessionConfiguration
 68             配置信息和default大體相同。除了,不會把cache,證書,或者任何和Session相關的數據存儲到硬盤,而是存儲在內存中,生命週期和Session一致。好比瀏覽器無痕瀏覽等功能就能夠基於這個來作。
 69         後臺模式(background):在後臺完成上傳下載,建立Configuration對象的時候須要給一個NSString的ID用於追蹤完成工做的Session是哪個(後面會講到)。
 70             + (NSURLSessionConfiguration *)backgroundSessionConfigurationWithIdentifier:(NSString *)identifier
 71             建立一個能夠在後臺甚至APP已經關閉的時候仍然在傳輸數據的會話。注意,後臺Session必定要在建立的時候賦予一個惟一的identifier,這樣在APP下次運行的時候,可以根據identifier來進行相關的區分。若是用戶關閉了APP,IOS 系統會關閉全部的background Session。並且,被用戶強制關閉了之後,IOS系統不會主動喚醒APP,只有用戶下次啓動了APP,數據傳輸纔會繼續。
 72 
 73     建立一個NSURLSession,系統提供了兩個建立方法:
 74 
 75         sessionWithConfiguration:
 76             根據剛纔建立的Configuration建立一個Session,系統默認建立一個新的OperationQueue處理Session的消息。
 77         sessionWithConfiguration:delegate:delegateQueue:
 78             能夠設定回調的delegate(注意這個回調delegate會被強引用),而且能夠設定delegate在哪一個OperationQueue回調,若是咱們將其設置爲[NSOperationQueue mainQueue]就能在主線程進行回調很是的方便。
 79 
 80 
 81     2.建立一個NSURLRequest調用剛纔的NSURLSession對象提供的Task函數,建立一個NSURLSessionTask。
 82 
 83     根據職能不一樣Task有三種子類:
 84     NSURLSessionUploadTask:上傳用的Task,傳完之後不會再下載返回結果;
 85     NSURLSessionDownloadTask:下載用的Task,下載內容到硬盤上;
 86     NSURLSessionDataTask:能夠上傳內容,上傳完成後再進行下載,存儲爲NSData格式。
 87 
 88     獲得的Task,調用resume開始工做。
 89 
 90 
 91     3.若是是細粒度的Session調用,Session與Delegate會在指定的OperationQueue中進行交互。
 92 
 93     4.當再也不須要鏈接調用Session的invalidateAndCancel直接關閉,或者調用finishTasksAndInvalidate等待當前Task結束後關閉。這時Delegate會收到URLSession:didBecomeInvalidWithError:這個事件。Delegate收到這個事件以後會被解引用。
 94 
 95     5.若是是一個BackgroundSession,在Task執行的時候,用戶切到後臺,Session會和ApplicationDelegate作交互。當程序切到後臺後,在BackgroundSession中的Task還會繼續下載。
 96 
 97 5、詳見代碼
 98 
 99 
100 
101 6、拓展瞭解部分
102 
103     1.NSURLSession
104     會話是基於NSURLSession網絡開發的核心組件。由上文的Configuration來配置,而後做爲工廠,建立NSURLSessionTask來進行實際的數據傳輸任務。
105 
106     2.NSURLRequest
107     指定請求的URL和cache策略。
108     經過NSURLRequest能夠設置HTTPMethod,默認是GET
109 
110     3.NSURLCache
111     cache URL請求返回的response。
112     //http://blog.sina.com.cn/s/blog_9693f61a01016t4w.html
113 
114     4.NSURLResponse/NSHTTPURLResponse
115     經過REST API進行資源操做的時候,有request(請求)必然就有response(響應)。NSURLResponse中包含了metadata,例如返回的數據長度(expectedContentLength),MIME 類型,text編碼方式。
116 
117     5.NSURLCredential
118     - 用來處理證書信息
119     好比用戶名密碼,好比服務器受權等等。
120     這個要根據不一樣的認證方式來處理,
121     例如如下就是初始化一個用戶名密碼的認證。
122     //http://blog.csdn.net/majiakun1/article/details/17013379
123 
124     6.NSURLAuthenticationChallenge
125     在訪問資源的時候,可能服務器會返回須要受權(提供一個NSURLCredential對象)。那麼,URLSession:task:didReceiveChallenge:completionHandler:被調用。須要的受權信息會保存在這個類的對象裏。
126 
127     7.NSURLProtectionSpace
128     這個類的對象表明了服務器上的一塊須要受權信息的區域,英文叫realm。經過這個對象的信息來響應Challenge。
129     好比,若是服務器須要一個基於用戶名密碼的認證,那麼應該先參考下NSURLProtectionSpace對象的host,port,realm,protocol等信息,而後依照這個信息提供證書。
相關文章
相關標籤/搜索