NSURLSession與NSURLConnection區(qū)別

兩者的區(qū)別主要在以下幾個(gè)方面:

  1. 使用現(xiàn)狀

NSURLSession是NSURLConnection 的替代者箫老,在2013年蘋(píng)果全球開(kāi)發(fā)者大會(huì)(WWDC2013)隨ios7一起發(fā)布刺覆,是對(duì)NSURLConnection進(jìn)行了重構(gòu)優(yōu)化后的新的網(wǎng)絡(luò)訪(fǎng)問(wèn)接口。從iOS9.0開(kāi)始键思, NSURLConnection中發(fā)送請(qǐng)求的兩個(gè)方法已過(guò)期(同步請(qǐng)求,異步請(qǐng)求)甫贯,初始化網(wǎng)絡(luò)連接(initWithRequest: delegate:)的方法也被設(shè)置為過(guò)期吼鳞,系統(tǒng)不再推薦使用,建議使用NSURLSession發(fā)送網(wǎng)絡(luò)請(qǐng)求获搏。

  1. 普通任務(wù)和上傳

NSURLSession針對(duì)下載/上傳等復(fù)雜的網(wǎng)絡(luò)操作提供了專(zhuān)門(mén)的解決方案赖条,針對(duì)普通、上傳和下載分別對(duì)應(yīng)三種不同的網(wǎng)絡(luò)請(qǐng)求任務(wù):NSURLSessionDataTask, NSURLSessionUploadTask和NSURLSessionDownloadTask.常熙。創(chuàng)建的task都是掛起狀態(tài)纬乍,需要resume才能執(zhí)行。

當(dāng)服務(wù)器返回的數(shù)據(jù)較小時(shí)裸卫,NSURLSession與NSURLConnection執(zhí)行普通任務(wù)的操作步驟沒(méi)有區(qū)別仿贬。

執(zhí)行上傳任務(wù)時(shí),NSURLSession與NSURLConnection一樣同樣需要設(shè)置POST請(qǐng)求的請(qǐng)求體進(jìn)行上傳墓贿。

  1. 下載任務(wù)方式

NSURLConnection下載文件時(shí)茧泪,先將整個(gè)文件下載到內(nèi)存,然后再寫(xiě)入沙盒聋袋,如果文件比較大队伟,就會(huì)出現(xiàn)內(nèi)存暴漲的情況。而使用NSURLSessionUploadTask下載文件幽勒,會(huì)默認(rèn)下載到沙盒中的tem文件夾中嗜侮,不會(huì)出現(xiàn)內(nèi)存暴漲的情況,但在下載完成后會(huì)將tem中的臨時(shí)文件刪除啥容,需要在初始化任務(wù)方法時(shí)锈颗,在completionHandler回調(diào)中增加保存文件的代碼。

以下代碼是實(shí)例化網(wǎng)絡(luò)下載任務(wù)時(shí)將下載的文件保存到沙盒的caches文件夾中:

[NSURLSessionDownloadTask [NSURLSessionDownloadTask *task = [session downloadTaskWithURL:[NSURL URLWithString:@"http://127.0.0.1/dawenjian.zip"] completionHandler:^(NSURL * _Nullable location, NSURLResponse * _Nullable response, NSError * _Nullable error) {

//獲取沙盒的caches路徑

NSString *path = [[NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)lastObject]stringByAppendingPathComponent:@"kkk.dmg"];

//生成URL路徑

NSURL *DCurl = [NSURL fileURLWithPath:path];

//將文件保存到指定文件目錄下

[[NSFileManager defaultManager]moveItemAtURL:location toURL:DCurl error:nil]; }]resume];

  1. 請(qǐng)求方法的控制

NSURLConnection實(shí)例化對(duì)象咪惠,實(shí)例化開(kāi)始击吱,默認(rèn)請(qǐng)求就發(fā)送(同步發(fā)送),不需要調(diào)用start方法遥昧。而cancel 可以停止請(qǐng)求的發(fā)送覆醇,停止后不能繼續(xù)訪(fǎng)問(wèn),需要?jiǎng)?chuàng)建新的請(qǐng)求渠鸽。

NSURLSession有三個(gè)控制方法叫乌,取消(cancel),暫停(suspend)徽缚,繼續(xù)(resume),暫停后可以通過(guò)繼續(xù)恢復(fù)當(dāng)前的請(qǐng)求任務(wù)革屠。

  1. 斷點(diǎn)續(xù)傳的方式

NSURLConnection進(jìn)行斷點(diǎn)下載凿试,通過(guò)設(shè)置訪(fǎng)問(wèn)請(qǐng)求的HTTPHeaderField的Range屬性排宰,開(kāi)啟運(yùn)行循環(huán),NSURLConnection的代理方法作為運(yùn)行循環(huán)的事件源那婉,接收到下載數(shù)據(jù)時(shí)代理方法就會(huì)持續(xù)調(diào)用板甘,并使用NSOutputStream管道流進(jìn)行數(shù)據(jù)保存。

NSURLSession進(jìn)行斷點(diǎn)下載详炬,當(dāng)暫停下載任務(wù)后盐类,如果 downloadTask (下載任務(wù))為非空,調(diào)用 cancelByProducingResumeData:(void (^)(NSData *resumeData))*completionHandler* 這個(gè)方法呛谜,這個(gè)方法接收一個(gè)參數(shù)在跳,完成處理代碼塊,這個(gè)代碼塊有一個(gè) NSData 參數(shù) resumeData隐岛,如果 resumeData 非空猫妙,我們就保存這個(gè)對(duì)象到視圖控制器的 resumeData 屬性中。在點(diǎn)擊再次下載時(shí)聚凹,通過(guò)調(diào)用 [ [self.session downloadTaskWithResumeData:self.resumeData]resume]方法進(jìn)行繼續(xù)下載操作割坠。

經(jīng)過(guò)以上比較可以發(fā)現(xiàn),使用NSURLSession進(jìn)行斷點(diǎn)下載更加便捷妒牙。

  1. 配置信息

NSURLSession的構(gòu)造方法(sessionWithConfiguration:delegate:delegateQueue)中有一個(gè) NSURLSessionConfiguration類(lèi)的參數(shù)可以設(shè)置配置信息彼哼,其決定了cookie,安全和高速緩存策略湘今,最大主機(jī)連接數(shù)敢朱,資源管理,網(wǎng)絡(luò)超時(shí)等配置象浑。NSURLConnection不能進(jìn)行這個(gè)配置蔫饰,相比于 NSURLConnection 依賴(lài)于一個(gè)全局的配置對(duì)象,缺乏靈活性而言愉豺,NSURLSession 有很大的改進(jìn)了篓吁。

NSURLSession可以設(shè)置三種配置信息,分別通過(guò)調(diào)用三個(gè)累方法返回配置對(duì)象:

  • (NSURLSessionConfiguration *)defaultSessionConfiguration蚪拦,配置信息使用基于硬盤(pán)的持久話(huà)Cache杖剪,保存用戶(hù)的證書(shū)到鑰匙串,使用共享cookie存儲(chǔ);

  • (NSURLSessionConfiguration *)ephemeralSessionConfiguration 驰贷,配置信息和default大致相同盛嘿。除了,不會(huì)把cache括袒,證書(shū)次兆,或者任何和Session相關(guān)的數(shù)據(jù)存儲(chǔ)到硬盤(pán),而是存儲(chǔ)在內(nèi)存中锹锰,生命周期和Session一致芥炭。比如瀏覽器無(wú)痕瀏覽等功能就可以基于這個(gè)來(lái)做漓库;

  • (NSURLSessionConfiguration *)backgroundSessionConfigurationWithIdentifier:(NSString *)identifier,配置信息可以創(chuàng)建一個(gè)可以在后臺(tái)甚至APP已經(jīng)關(guān)閉的時(shí)候仍然在傳輸數(shù)據(jù)的session园蝠。注意渺蒿,后臺(tái)Session一定要在創(chuàng)建的時(shí)候賦予一個(gè)唯一的identifier,這樣在A(yíng)PP下次運(yùn)行的時(shí)候彪薛,能夠根據(jù)identifier來(lái)進(jìn)行相關(guān)的區(qū)分茂装。如果用戶(hù)關(guān)閉了APP,IOS 系統(tǒng)會(huì)關(guān)閉所有的background Session。而且善延,被用戶(hù)強(qiáng)制關(guān)閉了以后少态,IOS系統(tǒng)不會(huì)主動(dòng)喚醒APP,只有用戶(hù)下次啟動(dòng)了APP挚冤,數(shù)據(jù)傳輸才會(huì)繼續(xù)况增。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市训挡,隨后出現(xiàn)的幾起案子澳骤,更是在濱河造成了極大的恐慌,老刑警劉巖澜薄,帶你破解...
    沈念sama閱讀 216,591評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件为肮,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡肤京,警方通過(guò)查閱死者的電腦和手機(jī)颊艳,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,448評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)忘分,“玉大人棋枕,你說(shuō)我怎么就攤上這事《事停” “怎么了重斑?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,823評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀(guān)的道長(zhǎng)肯骇。 經(jīng)常有香客問(wèn)我窥浪,道長(zhǎng),這世上最難降的妖魔是什么笛丙? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,204評(píng)論 1 292
  • 正文 為了忘掉前任漾脂,我火速辦了婚禮,結(jié)果婚禮上胚鸯,老公的妹妹穿的比我還像新娘骨稿。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,228評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布啊终。 她就那樣靜靜地躺著镜豹,像睡著了一般傲须。 火紅的嫁衣襯著肌膚如雪蓝牲。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,190評(píng)論 1 299
  • 那天泰讽,我揣著相機(jī)與錄音例衍,去河邊找鬼。 笑死已卸,一個(gè)胖子當(dāng)著我的面吹牛佛玄,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播累澡,決...
    沈念sama閱讀 40,078評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼梦抢,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了愧哟?” 一聲冷哼從身側(cè)響起奥吩,我...
    開(kāi)封第一講書(shū)人閱讀 38,923評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎蕊梧,沒(méi)想到半個(gè)月后霞赫,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,334評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡肥矢,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,550評(píng)論 2 333
  • 正文 我和宋清朗相戀三年端衰,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片甘改。...
    茶點(diǎn)故事閱讀 39,727評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡旅东,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出十艾,到底是詐尸還是另有隱情抵代,我是刑警寧澤,帶...
    沈念sama閱讀 35,428評(píng)論 5 343
  • 正文 年R本政府宣布疟羹,位于F島的核電站主守,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏榄融。R本人自食惡果不足惜参淫,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,022評(píng)論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望愧杯。 院中可真熱鬧涎才,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,672評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至棕兼,卻和暖如春陡舅,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背伴挚。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,826評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工靶衍, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人茎芋。 一個(gè)月前我還...
    沈念sama閱讀 47,734評(píng)論 2 368
  • 正文 我出身青樓颅眶,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親田弥。 傳聞我的和親對(duì)象是個(gè)殘疾皇子涛酗,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,619評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容