一汪诉、概述
NSURLSession包括5個(gè)部分:
NSURLRequest谁尸,
NSURLCache,
NSURLSession茧痒,
NSURLSessionConfiguration,
NSURLSessionTask融蹂。
二旺订、NSURLSession的幾個(gè)核心類
2.1 NSURLSessionConfiguration
NSURLSession的配置信息。這些配置信息決定了NSURLSession的種類超燃,HTTP的額外headers区拳,請(qǐng)求的timeout時(shí)間,Cookie的接受策略等配置信息意乓。更多的參見官方文檔樱调。
這里大概闡述下決定NSURLSession種類的三種NSURLSessionConfiguration:
a.
+(NSURLSessionConfiguration *)defaultSessionConfiguration
defaultSession,使用基于硬盤的持久話Cache届良,保存用戶的證書到鑰匙串,使用共享cookie存儲(chǔ)
b.
+(NSURLSessionConfiguration *)ephemeralSessionConfiguration
配置信息和default大致相同笆凌。除了,不會(huì)把cache士葫,證書乞而,或者任何和Session相關(guān)的數(shù)據(jù)存儲(chǔ)到硬盤,而是存儲(chǔ)在內(nèi)存中慢显,生命周期和Session一致爪模。比如瀏覽器無痕瀏覽等功能就可以基于這個(gè)來做。
c.
+(NSURLSessionConfiguration *)backgroundSessionConfigurationWithIdentifier:(NSString *)identifier
創(chuàng)建一個(gè)可以在后臺(tái)甚至APP已經(jīng)關(guān)閉的時(shí)候仍然在傳輸數(shù)據(jù)的會(huì)話荚藻。注意呻右,后臺(tái)Session一定要在創(chuàng)建的時(shí)候賦予一個(gè)唯一的identifier,這樣在APP下次運(yùn)行的時(shí)候鞋喇,能夠根據(jù)identifier來進(jìn)行相關(guān)的區(qū)分声滥。如果用戶關(guān)閉了APP,IOS 系統(tǒng)會(huì)關(guān)閉所有的background Session。而且侦香,被用戶強(qiáng)制關(guān)閉了以后落塑,IOS系統(tǒng)不會(huì)主動(dòng)喚醒APP,只有用戶下次啟動(dòng)了APP罐韩,數(shù)據(jù)傳輸才會(huì)繼續(xù)憾赁。
2.2 NSURLSessionTask
session任務(wù)分三種:
DataTask -用來請(qǐng)求資源,然后服務(wù)器返回?cái)?shù)據(jù)散吵,再內(nèi)存中存儲(chǔ)為NSData格式龙考。default,ephemeral,shared Session支持data task蟆肆。background session不支持。
Upload Task-和DataTask類似晦款,只不過在請(qǐng)求的時(shí)候提供了request body炎功。并且background Session支持 upload task。
Download Task-下載內(nèi)容到硬盤上缓溅,所有類型的Session都支持蛇损。
注意,創(chuàng)建的task都是掛起狀態(tài)坛怪,需要resume才能執(zhí)行淤齐。
2.3 NSURLSession
會(huì)話是基于NSURLSession網(wǎng)絡(luò)開發(fā)的核心組件。由上文的Configuration來配置袜匿,然后作為工廠更啄,創(chuàng)建NSURLSessionTask來進(jìn)行實(shí)際的數(shù)據(jù)傳輸任務(wù)。
//Configuration來配置居灯,初始化session
self.session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]];
//創(chuàng)建一個(gè)task
NSURLSessionDataTask * dataTask = [self.session dataTaskWithURL:[NSURL URLWithString:imageURL] completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
}];
//開始
[dataTask resume];
2.4 NSURLRequest
指定請(qǐng)求的URL和cache策略锈死。
就是在初始化的時(shí)候指定url,cachePolicy以及 timeoutInterval.
通過NSURLRequest可以設(shè)置HTTPMethod,默認(rèn)是GET
(instancetype)requestWithURL:(NSURL *)theURL cachePolicy:(NSURLRequestCachePolicy)cachePolicy timeoutInterval:(NSTimeInterval)timeoutInterval
2.5 NSURLCache
cache URL請(qǐng)求返回的response穆壕。
當(dāng)然待牵,通過這個(gè)類也可以獲得到當(dāng)前cache的使用情況。
實(shí)現(xiàn)的方式是把NSURLRequest對(duì)象映射到NSCachedURLResponse對(duì)象喇勋∮Ц茫可以設(shè)置在內(nèi)存中緩存的大小,以及在磁盤中緩存的大小和路徑川背。
不是特別需要的話贰拿,使用Shared Cached足矣,如果有特別需要熄云,創(chuàng)建一個(gè)NSURLCache對(duì)象膨更,然后通過+ setSharedURLCache 來設(shè)定。
2.6 NSURLResponse/NSHTTPURLResponse
通過REST API進(jìn)行資源操作的時(shí)候缴允,有request(請(qǐng)求)必然就有response(響應(yīng))荚守。
NSURLResponse中包含了metadata,例如返回的數(shù)據(jù)長度(expectedContentLength)练般,MIME 類型矗漾,text編碼方式。
NSHTTPURLResponse是NSURLResponse的子類薄料,由于絕大部分的REST都是HTTP的敞贡,所以,通常遇到的都是NSHTTPURLResponse對(duì)象摄职。通過這個(gè)對(duì)象可以獲得:HTTP的headers誊役,status Code等信息获列。
2.7 NSURLCredential
- 用來處理證書信息