NSURLSession

一、概述

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ì)象??梢栽O(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ù)長(zhǎng)度(expectedContentLength),MIME 類型,text編碼方式。

NSHTTPURLResponse是NSURLResponse的子類,由于絕大部分的REST都是HTTP的,所以,通常遇到的都是NSHTTPURLResponse對(duì)象。通過這個(gè)對(duì)象可以獲得:HTTP的headers,status Code等信息。

2.7 NSURLCredential

  • 用來處理證書信息
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • NSURLSession概述1. NSURLSession session類型NSURLSession包括下面3種...
    瞎嘚嘚閱讀 1,973評(píng)論 2 2
  • 在蘋果徹底棄用NSURLConnection之后自己總結(jié)的一個(gè)網(wǎng)上的內(nèi)容,加上自己寫的小Demo,很多都是借鑒網(wǎng)絡(luò)...
    付寒宇閱讀 4,529評(píng)論 2 13
  • NSUrlSession專題 1概述 【主要參考】NSURLSession http://blog.csdn.ne...
    Kevin_Junbaozi閱讀 4,341評(píng)論 1 15
  • 這是一封跨越整整一個(gè)輪回才寫好的情書。歲月作紙,愛為墨。寫給我前世的情人,今生的父親。 都說女兒是父親前世的情人。...
    沐筆閱讀 427評(píng)論 3 5
  • 中午因?yàn)榕畠阂恢辈凰X,閉著眼睛嘴上還要吧嗒吧嗒作響,手還要四處亂動(dòng),眼看又快到起床時(shí)間了,我又怒不可遏...
    趙艷玲18閱讀 223評(píng)論 0 0

友情鏈接更多精彩內(nèi)容