說明:這篇文章是在百度上搜索“NSURLSession與NSURLConnection區別”查找到的資料,僅供自己學習理解,不屬於原創,本來想註明來源,但是發現很多內容相同的文章,也不知道誰才是真正的原創作者,所以就不寫明出處了!在這裡我向真正的原作者說聲感謝,謝謝你的分享! 1、 使用現狀 NSU ...
說明:這篇文章是在百度上搜索“NSURLSession與NSURLConnection區別”查找到的資料,僅供自己學習理解,不屬於原創,本來想註明來源,但是發現很多內容相同的文章,也不知道誰才是真正的原創作者,所以就不寫明出處了!在這裡我向真正的原作者說聲感謝,謝謝你的分享!
1、 使用現狀
NSURLSession是NSURLConnection 的替代者,在2013年蘋果全球開發者大會(WWDC2013)隨ios7一起發佈,是對NSURLConnection進行了重構優化後的新的網路訪問介面。從iOS9.0開始, NSURLConnection中發送請求的兩個方法已過期(同步請求,非同步請求),初始化網路連接(initWithRequest: delegate:)的方法也被設置為過期,系統不再推薦使用,建議使用NSURLSession發送網路請求。2、普通任務和上傳
NSURLSession針對下載/上傳等複雜的網路操作提供了專門的解決方案,針對普通、上傳和下載分別對應三種不同的網路請求任務:NSURLSessionDataTask, NSURLSessionUploadTask和NSURLSessionDownloadTask.。創建的task都是掛起狀態,需要resume才能執行。 當伺服器返回的數據較小時,NSURLSession與NSURLConnection執行普通任務的操作步驟沒有區別。 執行上傳任務時,NSURLSession與NSURLConnection一樣同樣需要設置POST請求的請求體進行上傳。3、下載任務方式
NSURLConnection下載文件時,先將整個文件下載到記憶體,然後再寫入沙盒,如果文件比較大,就會出現記憶體暴漲的情況。而使用NSURLSessionUploadTask下載文件,會預設下載到沙盒中的tem文件夾中,不會出現記憶體暴漲的情況,但在下載完成後會將tem中的臨時文件刪除,需要在初始化任務方法時,在completionHandler回調中增加保存文件的代碼。 以下代碼是實例化網路下載任務時將下載的文件保存到沙盒的caches文件夾中:[NSURLSessionDownloadTask [NSURLSessionDownloadTask *task = [session downloadTaskWithURL:[NSURL URLWithString:@"http://192.168.1.17/xxxx.zip"] completionHandler:^(NSURL * _Nullable location, NSURLResponse * _Nullable response, NSError * _Nullable error) { // 獲取沙盒的caches路徑 NSString *path = [[NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)lastObject]stringByAppendingPathComponent:@"xxx.dmg"]; // 生成URL路徑 NSURL *url = [NSURL fileURLWithPath:path]; // 將文件保存到指定文件目錄下 [[NSFileManager defaultManager]moveItemAtURL:location toURL: url error:nil]; }] resume];