NSURLSession與NSURLConnection區別,nsurlsession

來源:互聯網
上載者:User

NSURLSession與NSURLConnection區別,nsurlsession
說明:這篇文章是在百度上搜尋“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];
4、要求方法的控制     NSURLConnection執行個體化對象,執行個體化開始,預設請求就發送(同步發送),不需要調用start方法。而cancel 可以停止請求的發送,停止後不能繼續訪問,需要建立新的請求。 NSURLSession有三個控制方法,取消(cancel),暫停(suspend),繼續(resume),暫停後可以通過繼續恢複當前的請求任務。5、斷點續傳的方式     NSURLConnection進行斷點下載,通過設定訪問請求的HTTPHeaderField的Range屬性,開啟運行迴圈,NSURLConnection的代理方法作為運行迴圈的事件來源,接收到下載資料時代理方法就會持續調用,並使用NSOutputStream管道流進行資料儲存。 NSURLSession進行斷點下載,當暫停下載任務後,如果 downloadTask (下載任務)為非空,調用 cancelByProducingResumeData:(void (^)(NSData *resumeData))completionHandler 這個方法,這個方法接收一個參數,完成處理代碼塊,這個代碼塊有一個 NSData 參數 resumeData,如果 resumeData 非空,我們就儲存這個對象到視圖控制器的 resumeData 屬性中。在點擊再次下載時,通過調用 [ [self.session downloadTaskWithResumeData:self.resumeData] resume]方法進行繼續下載操作。 經過以上比較可以發現,使用NSURLSession進行斷點下載更加便捷。6、配置資訊     NSURLSession的構造方法(sessionWithConfiguration:delegate:delegateQueue)中有一個 NSURLSessionConfiguration類的參數可以設定配置資訊,其決定了cookie,安全和快取策略,最大主機串連數,資源管理,網路逾時等配置。NSURLConnection不能進行這個配置,相比於 NSURLConnection 依賴於一個全域的設定物件,缺乏靈活性而言,NSURLSession 有很大的改進了。 NSURLSession可以設定三種配置資訊,分別通過調用三個累方法返回設定物件:     + (NSURLSessionConfiguration *)defaultSessionConfiguration,配置資訊使用基於硬碟的持久話Cache,儲存使用者的認證到鑰匙串,使用共用cookie儲存;     + (NSURLSessionConfiguration *)ephemeralSessionConfiguration ,配置資訊和default大致相同。除了,不會把cache,認證,或者任何和Session相關的資料存放區到硬碟,而是儲存在記憶體中,生命週期和Session一致。比如瀏覽器無痕瀏覽等功能就可以基於這個來做;     + (NSURLSessionConfiguration *)backgroundSessionConfigurationWithIdentifier:(NSString *)identifier,配置資訊可以建立一個可以在後台甚至APP已經關閉的時候仍然在傳輸資料的session。注意,後台Session一定要在建立的時候賦予一個唯一的identifier,這樣在APP下次啟動並執行時候,能夠根據identifier來進行相關的區分。如果使用者關閉了APP,IOS 系統會關閉所有的background Session。而且,被使用者強制關閉了以後,IOS系統不會主動喚醒APP,只有使用者下次啟動了APP,資料轉送才會繼續。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.