NSURLSession

NSURLSession 類和相關類提供下載內容的 API。此 API 提供了一組豐富的委託方法,用於支援身份驗證,並使你的應用能夠在你的應用未執行時執行後臺下載,或者在 iOS 中,在你的應用暫停時執行後臺下載。

在較高的層次上, NSURLSession 基於會話和任務的概念。任務表示單個 URL 的單個請求(或單個上載到單個 URL)。會話是一組相關請求。

作業系統提供單個預先存在的會話 - 共享會話,它基本上像 NSURLConnection 一樣工作。此外,你可以根據需要在應用中建立自己的會話。

不同的應用以不同的方式使用會話。許多應用程式在啟動時建立一個會話,並繼續重複使用它。其他應用程式可以從取消一組相關任務中受益(例如,當你關閉選項卡時,Web 瀏覽器會取消所有未完成的請求),從而建立一個會話來儲存每組相關請求。

使用 NSURLSession 的第一步是建立會話配置物件。 (通常)可重用物件包含各種會話設定,你可以根據自己的特定需求進行調整,例如最大併發,每個請求傳送的額外標頭,是否允許通過蜂窩無線電傳送請求(僅限 iOS),超時,憑證儲存,最小 TLS 版本,甚至代理設定。

會話配置有三種型別,具體取決於你希望結果會話的行為方式:

  • 預設配置建立的會話與 NSURLConnection 非常相似。
  • 後臺配置建立會話,其中請求在程序外發生,即使應用程式不再執行,也允許下載繼續。
  • 臨時配置會建立不會將任何內容快取到磁碟,不將 cookie 儲存到磁碟等的會話,因此適用於隱藏瀏覽器視窗等內容。

建立後臺配置時,必須提供會話識別符號,以便稍後重新關聯後臺會話(如果你的應用程式退出或被作業系統暫停或終止)。你的應用中不得有多個具有相同識別符號的會話例項,因此通常情況下,這些配置不可重複使用。可以重用所有其他會話配置以建立任意數量的會話。因此,如果你需要建立具有類似設定的多個會話,則可以建立一次配置,並在每次建立新會話時重複使用它。

建立會話後,你可以在該會話中建立任務。有三種型別的任務:

  • 資料任務將資料作為 NSData 物件返回。這些適用於一般用途,但在後臺會話中不受支援。
  • 下載任務將資料作為磁碟上的檔案返回。這些適用於較大的請求,或用於後臺會話。
  • 上載任務從 NSData 物件或磁碟上的檔案上載資料。你提供了一個提供 POST 正文的資料物件或檔案。你在任務上提供的正文資料/檔案將覆蓋 NSURLRequest 物件中提供的任何正文資料/檔案(如果適用)。

這些型別中的每一種都允許你以幾種不同的方式獲取響應資料 - 通過使用基於塊的回撥或通過在會話上提供委託並實現委託方法。

此外,NSURLSession 允許你提供用於處理身份驗證,執行自定義 TLS 證書處理(包括客戶端證書和伺服器驗證),更改快取行為等的委託方法。