iOS NSURLSession 指南

與NSURLConnection比較。

一、NSURLConnection實際上指的是Foundation中的一套組件,包括:NSURLRequest, NSURLResponse, NSURLProtocol, NSURLCache, NSHTTPCookie, NSURLCredentialStorage, 以及NSURLConnection。 二、NSURLRequest封裝了一個實際的請求,保存發送給服務器的全部數據,包括URL,請求頭,方法等。 Connection對象負責發送一個request請求,創建與服務器的連接並收集來自服務器的數據。 三、請求被髮送前,先訪問共享的緩存,而後服務器能夠發出驗證,而後經過共享的cookie,證書或鏈接委託自動處理。緩存

以上是NSURLConnection的一些概覽。安全

NSURLSession的不一樣

與Connection相比,Session的改善有:服務器

一、可單獨配置每一個會話的緩存、協議、cookie、證書策略、甚致跨應用共享。 二、能夠在後臺使用。cookie

NSURLSession的組成:

一、與以前相同的組件如: NSURLRequest、NSURLCache。 二、NSURLConnection被替換爲NSURLSession,NSURLSessionConfiguration,NSURLSessionTask。網絡

NSURLSessionTask:

sessionTask負責加載數據。它們共享session的委託。全部的任務都可以取消、暫停、恢復。任務應該使用session建立而不是直接使用init方法。 它包括三個子類:NSURLSessionDataTask、NSURLSessionUploadTask、NSURLSessionDownloadTask。 當dataTask完成時,它具備關聯的數據。downloadTask完成時,它具備一個已下載文件的臨時路徑。 如下是簡易的使用方法:session

NSURL *URL = [NSURL URLWithString:@"http://example.com"];
NSURLRequest *request = [NSURLRequest requestWithURL:URL];
NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
                                        completionHandler:
    ^(NSData *data, NSURLResponse *response, NSError *error) {
        // ...
    }];
[task resume];
NSURL *URL = [NSURL URLWithString:@"http://example.com/upload"];
NSURLRequest *request = [NSURLRequest requestWithURL:URL];
NSData *data = ...;
NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionUploadTask *uploadTask = [session uploadTaskWithRequest:request
                                                            fromData:data
                                                  completionHandler:
    ^(NSData *data, NSURLResponse *response, NSError *error) {
        // ...
    }];
[uploadTask resume];

NSURLSessionConfiguration:

configuration對象用於初始化session對象,定義了session如何產生請求,如訪問性能、cookie、安全性、緩存策略等。 配置只在初始化的時候被讀取一次,以後是不可變的。函數

configuration有三個構造函數分別用於三個別同的場景。性能

  • defaultSessionConfiguration: 這實際上與NSURLConnection的網絡協議棧是同樣的,它使用共享的默認網絡配置。code

  • ephemeralSessionConfiguration: 返回一個預設的場配置,沒有緩存、cookie或證書。視頻

  • backgroundSessionConfiguration: 建立一個後臺會話,能夠在應用程序掛起或退出的狀況下運行任務。

configuration的屬性:

  • HTTPAdditionalHeaders指定了默認的請求頭。

  • networkServiceType 對標準網絡流量、網絡電話、語音、視頻以及一個後臺進程應該使用的流量進行了區分。

  • allowsCellularAccess和discretionary 用於節省經過蜂窩網絡鏈接的帶寬。建議使用後臺傳輸的時候使用discretionary屬性,由於allowCellularAccess會把 wifi和電源可用性考慮在內。

  • timeoutIntervalForRequest和timeoutForResource 指定請求和資源超時時間。

  • HTTPMaximumConnectionsPerHost 指定鏈接到特定主機的鏈接數量。

  • HTTPCookieStorage 是被會話使用的cookie存儲。默認狀況下,NSHTTPCookieShorage的+ sharedHTTPCookieStorage會被使用,這與NSURLConnection是相同的。

  • HTTPCookieAcceptPolicy 決定了該會話應該接受從服務器發出的cookie的條件。

  • HTTPShouldSetCookies 指定了請求是否應該使用會話HTTPCookieStorage的cookie。

  • URLCredentialStorage 是會話使用的證書存儲。默認狀況下,NSURLCredentialStorage 的+ sharedCredentialStorage 會被使用使用,這與NSURLConnection是相同的。

  • TLSMaximumSupportedProtocol 和 TLSMinimumSupportedProtocol 肯定是否支持SSLProtocol版本的會話。

  • URLCache 是會話使用的緩存。默認狀況下,NSURLCache 的+ sharedURLCache 會被使用,這與NSURLConnection是相同的。

相關文章
相關標籤/搜索