iOS開發之網絡編程--六、NSURLSessionConfiguration筆記

 

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

展開請求級別中與NSMutableURLRequest相關的可供選擇的方案,咱們能夠看到NSURLSessionConfiguration對於會話如何產生請求,提供了至關多的控制和靈活性。從網絡訪問性能,到cookie,安全性,緩存策略,自定義協議,啓動事件設置,以及用於移動設備優化的幾個新屬性,你會發現你一直在尋找的,正是NSURLSessionConfiguration。

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

一、構造方法

NSURLSessionConfiguration有三個類構造函數,這很好地說明了NSURLSession是爲不一樣的用例而設計的。

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

想要查看更多關於後臺會話的信息,能夠查看WWDC Session 204: 「What’s New with Multitasking」json

 

二、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"指定了會話鏈接中的代理服務器。一樣地,大多數面向消費者的應用程序都不須要代理,因此基本上不須要配置這個屬性
關於鏈接代理的更多信息能夠在 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類的特定會話數組緩存

相關文章
相關標籤/搜索