iOS开发之网络编程--6、NSURLSessionConfiguration笔记
NSURLSessionConfiguration對象用于初始化NSURLSession對象。
展開請求級別中與NSMutableURLRequest相關的可供選擇的方案,我們可以看到NSURLSessionConfiguration對于會話如何產生請求,提供了相當多的控制和靈活性。從網絡訪問性能,到cookie,安全性,緩存策略,自定義協議,啟動事件設置,以及用于移動設備優化的幾個新屬性,你會發現你一直在尋找的,正是NSURLSessionConfiguration。
會話在初始化時復制它們的配置,NSURLSession有一個只讀的配置屬性,使得該配置對象上的變化對這個會話的政策無效。配置在初始化時被讀取一次,之后都是不會變化的。
1、構造方法
NSURLSessionConfiguration有三個類構造函數,這很好地說明了NSURLSession是為不同的用例而設計的。
1-1、 "defaultSessionConfiguration"返回標準配置,這實際上與NSURLConnection的網絡協議棧是一樣的,具有相同的共享NSHTTPCookieStorage,共享NSURLCache和共享NSURLCredentialStorage。
1-2、 "ephemeralSessionConfiguration"返回一個預設配置,沒有持久性存儲的緩存,Cookie或證書。這對于實現像"秘密瀏覽"功能的功能來說,是很理想的。
1-3、 "backgroundSessionConfiguration":獨特之處在于,它會創建一個后臺會話。后臺會話不同于常規的,普通的會話,它甚至可以在應用程序掛起,退出,崩潰的情況下運行上傳和下載任務。初始化時指定的標識符,被用于向任何可能在進程外恢復后臺傳輸的守護進程提供上下文。
想要查看更多關于后臺會話的信息,可以查看WWDC Session 204: “What’s New with Multitasking”
?
2、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類的特定會話數組
總結
以上是生活随笔為你收集整理的iOS开发之网络编程--6、NSURLSessionConfiguration笔记的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C#中哈希表(HashTable)的用法
- 下一篇: 从零开始学_JavaScript_系列(