iOS開發之網路編程--6、NSURLSessionConfiguration筆記

來源:互聯網
上載者:User

標籤:

 

NSURLSessionConfiguration對象用於初始化NSURLSession對象。

展開請求層級中與NSMutableURLRequest相關的可供選擇的方案,我們可以看到NSURLSessionConfiguration對於會話如何產生請求,提供了相當多的控制和靈活性。從網路訪問效能,到cookie,安全性,緩衝策略,自訂協議,啟動事件設定,以及用於行動裝置最佳化的幾個新屬性,你會發現你一直在尋找的,正是NSURLSessionConfiguration。

會話在初始化時複製它們的配置,NSURLSession有一個唯讀配置屬性,使得該設定物件上的變化對這個會話的政策無效。配置在初始化時被讀取一次,之後都是不會變化的。

-構造方法

NSURLSessionConfiguration有三個類建構函式,這很好地說明了NSURLSession是為不同的用例而設計的。

+ "defaultSessionConfiguration"返回標準配置,這實際上與NSURLConnection的網路通訊協定棧是一樣的,具有相同的共用NSHTTPCookieStorage,共用NSURLCache和共用NSURLCredentialStorage。
+ "ephemeralSessionConfiguration"返回一個預設配置,沒有持久性儲存的緩衝,Cookie或認證。這對於實現像"秘密瀏覽"功能的功能來說,是很理想的。
+ "backgroundSessionConfiguration":獨特之處在於,它會建立一個後台會話。後台會話不同於常規的,普通的會話,它甚至可以在應用程式掛起,退出,崩潰的情況下運行上傳和下載任務。初始化時指定的標識符,被用於向任何可能在進程外恢複後台傳輸的守護進程提供上下文。

想要查看更多關於後台會話的資訊,可以查看WWDC Session 204: “What’s New with Multitasking”

-NSURLSessionConfiguration的屬性

NSURLSessionConfiguration擁有20個屬性。熟練掌握這些屬性的用處,將使應用程式充分利用其網路環境。

最重要的屬性:
# 替代 request 中的 forHTTPHeaderField 告訴伺服器有關用戶端的附加資訊
"HTTPAdditionalHeaders"指定了一組預設的可以設定出站請求的資料頭。這對於跨會話共用資訊,如內容類型,語言,使用者代理程式,身份認證,是很有用的。

# WebDav的身分識別驗證
NSString *userPasswordString = [NSString stringWithFormat:@"%@:%@", user, password];
NSData * userPasswordData = [userPasswordString dataUsingEncoding:NSUTF8StringEncoding];
NSString *base64EncodedCredential = [userPasswordData base64EncodedStringWithOptions:0];
NSString *authString = [NSString stringWithFormat:@"Basic: %@", base64EncodedCredential];

# 設定用戶端類型
NSString *userAgentString = @"iPhone AppleWebKit";

configuration.HTTPAdditionalHeaders = @{@"Accept": @"application/json",
                                        @"Accept-Language": @"en",
                                        @"Authorization": authString,
                                        @"User-Agent": userAgentString};

"networkServiceType(網路服務類型)"對標準的網路流量,網路電話,語音,視頻,以及由一個後台進程使用的流量進行了區分。大多數應用程式都不需要設定這個

"allowsCellularAccess(允許蜂窩訪問)"和"discretionary(自行決定)"被用於節省通過蜂窩串連的頻寬。建議在使用後台傳輸的時候,使用discretionary屬性,而不是allowsCellularAccess屬性,因為它會把WiFi和電源可用性考慮在內

"timeoutIntervalForRequest"和"timeoutIntervalForResource"指定了請求以及該資源的逾時時間間隔。許多開發人員試圖使用timeoutInterval去限制發送請求的總時間,但這誤會了timeoutInterval的意思:報文之間的時間。timeoutIntervalForResource實際上提供了整體逾時的特性,這應該只用於後台傳輸,而不是使用者實際上可能想要等待的任何東西

"HTTPMaximumConnectionsPerHost"是 Foundation 架構中URL載入系統的一個新的配置選項。它曾經被用於NSURLConnection管理私人串連池。現在有了NSURLSession,開發人員可以在需要時限制串連到特定主機的數量

"HTTPShouldUsePipelining"也出現在NSMutableURLRequest,它可以被用於開啟HTTP管道,這可以顯著降低請求的載入時間,但是由於沒有被伺服器廣泛支援,預設是禁用的

"sessionSendsLaunchEvents" 是另一個新的屬性,該屬性指定該會話是否應該從後台啟動

"connectionProxyDictionary"指定了會話串連中的Proxy 伺服器。同樣地,大多數面向消費者的應用程式都不需要代理,所以基本上不需要配置這個屬性
關於串連代理的更多資訊可以在 CFProxySupport Reference 找到。

"Cookie Policies"
-"HTTPCookieStorage" 是被會話使用的cookie儲存。預設情況下,NSHTTPCookieShorage的 + sharedHTTPCookieStorage會被使用,這與NSURLConnection是相同的
-"HTTPCookieAcceptPolicy" 決定了該會話應該接受從伺服器發出的cookie的條件
-"HTTPShouldSetCookies" 指定了請求是否應該使用會話HTTPCookieStorage的cookie

"Security Policies"
  URLCredentialStorage 是會話使用的憑證存放區。預設情況下,NSURLCredentialStorage 的+ sharedCredentialStorage 會被使用使用,這與NSURLConnection是相同的

"TLSMaximumSupportedProtocol" 和 "TLSMinimumSupportedProtocol" 確定是否支援SSLProtocol版本的會話

"Caching Policies"
URLCache 是會話使用的緩衝。預設情況下,NSURLCache 的 + sharedURLCache 會被使用,這與NSURLConnection是相同的
requestCachePolicy 指定了一個請求的緩衝響應應該在什麼時候返回。這相當於NSURLRequest 的-cachePolicy方法

"Custom Protocols"
protocolClasses是註冊NSURLProtocol類的特定會話數組

iOS開發之網路編程--6、NSURLSessionConfiguration筆記

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.