iOS NSURLSession 指南 - iOS平凡之路 - SegmentFault 思否
NSURLSession的不同
iOS 7.0+, macOS 10.9+, tvOS 9.0+, watchOS 2.0+
與Connection相比,Session的改善有:
1雪标、可單獨配置每個會話的緩存讯嫂、協(xié)議、cookie、證書策略绷跑、甚致跨應(yīng)用共享宾毒。 2鸣峭、可以在后臺使用前普。
NSURLSession的組成:
1、與之前相同的組件如: NSURLRequest壹堰、NSURLCache拭卿。 2、NSURLConnection被替換為NSURLSession贱纠,NSURLSessionConfiguration峻厚,NSURLSessionTask。
NSURLSessionTask:
sessionTask負責加載數(shù)據(jù)谆焊。它們共享session的委托惠桃。所有的任務(wù)均可以取消、暫停辖试、恢復(fù)辜王。任務(wù)應(yīng)該使用session創(chuàng)建而不是直接使用init方法。 它包括三個子類:NSURLSessionDataTask罐孝、NSURLSessionUploadTask呐馆、NSURLSessionDownloadTask。 當dataTask完成時莲兢,它具有關(guān)聯(lián)的數(shù)據(jù)汹来。downloadTask完成時,它具有一個已下載文件的臨時路徑改艇。 以下是簡易的使用方法:
NSURL*URL = [NSURLURLWithString:@"http://example.com"];NSURLRequest*request = [NSURLRequestrequestWithURL:URL];NSURLSession*session = [NSURLSessionsharedSession];NSURLSessionDataTask*task = [session dataTaskWithRequest:request? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? completionHandler:? ? ^(NSData*data,NSURLResponse*response,NSError*error) {// ...}];[task resume];
NSURL*URL = [NSURLURLWithString:@"http://example.com/upload"];NSURLRequest*request = [NSURLRequestrequestWithURL:URL];NSData*data = ...;NSURLSession*session = [NSURLSessionsharedSession];NSURLSessionUploadTask*uploadTask = [session uploadTaskWithRequest:request? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? fromData:data? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? completionHandler:? ? ^(NSData*data,NSURLResponse*response,NSError*error) {// ...}];[uploadTask resume];
NSURLSessionConfiguration:
configuration對象用于初始化session對象收班,定義了session如何產(chǎn)生請求,如訪問性能谒兄、cookie摔桦、安全性、緩存策略等舵变。 配置只在初始化的時候被讀取一次酣溃,之后是不可變的。
configuration有三個構(gòu)造函數(shù)分別用于三個別同的場景纪隙。
defaultSessionConfiguration: 這實際上與NSURLConnection的網(wǎng)絡(luò)協(xié)議棧是一樣的赊豌,它使用共享的默認網(wǎng)絡(luò)配置。
ephemeralSessionConfiguration: 返回一個預(yù)設(shè)的場配置绵咱,沒有緩存碘饼、cookie或證書熙兔。
backgroundSessionConfiguration: 創(chuàng)建一個后臺會話,可以在應(yīng)用程序掛起或退出的情況下運行任務(wù)艾恼。
configuration的屬性:
HTTPAdditionalHeaders指定了默認的請求頭住涉。
networkServiceType 對標準網(wǎng)絡(luò)流量、網(wǎng)絡(luò)電話钠绍、語音舆声、視頻以及一個后臺進程應(yīng)該使用的流量進行了區(qū)分。
allowsCellularAccess和discretionary 用于節(jié)省通過蜂窩網(wǎng)絡(luò)連接的帶寬柳爽。建議使用后臺傳輸?shù)臅r候使用discretionary屬性媳握,因為allowCellularAccess會把 wifi和電源可用性考慮在內(nèi)。
timeoutIntervalForRequest和timeoutForResource 指定請求和資源超時時間磷脯。
HTTPMaximumConnectionsPerHost 指定連接到特定主機的連接數(shù)量蛾找。
HTTPCookieStorage 是被會話使用的cookie存儲。默認情況下赵誓,NSHTTPCookieShorage的+ sharedHTTPCookieStorage會被使用打毛,這與NSURLConnection是相同的。
HTTPCookieAcceptPolicy 決定了該會話應(yīng)該接受從服務(wù)器發(fā)出的cookie的條件俩功。
HTTPShouldSetCookies 指定了請求是否應(yīng)該使用會話HTTPCookieStorage的cookie幻枉。
URLCredentialStorage 是會話使用的證書存儲。默認情況下诡蜓,NSURLCredentialStorage 的+ sharedCredentialStorage 會被使用使用展辞,這與NSURLConnection是相同的。
TLSMaximumSupportedProtocol 和 TLSMinimumSupportedProtocol 確定是否支持SSLProtocol版本的會話万牺。
URLCache 是會話使用的緩存罗珍。默認情況下,NSURLCache 的+ sharedURLCache 會被使用脚粟,這與NSURLConnection是相同的覆旱。