NSURLSession 使用心得

zhYx__發表於2017-10-11

NSURLSession - 網路任務工具類

簡介 : 
iOS 7.0 出的,用於替代 NSURLConnection (iOS 9.0 被廢棄)
為HTTP資料傳輸提供一系列介面
支援後臺執行的網路任務
暫停/停止/重啟網路任務,不再需要NSOperation封裝


作用 :

直接使用系統方法可以實現檔案上傳和下載(Block回撥)

通過代理方法可以獲取檔案上傳和下載進度(Delegate監聽)

代理方法還可實現下載任務的斷點續傳


注意事項和使用方法 :

為了方便使用,蘋果提供了一個全域性 session (單例)

所有的 任務(Task) 都是由 session 發起

所有的任務預設是掛起的,需要 resume

要設定 Session 代理,需要自定義 Session 不能使用單例 Session


結構圖 : (便於理解,蒙圈也可跳過)


方法 :

例項化方法

+ (NSURLSession *)sessionWithConfiguration:(NSURLSessionConfiguration *)configuration  //引數1 - configuration : 配置

delegate:(nullable id <NSURLSessionDelegate>)delegate //引數2 - delegate : 設定代理

delegateQueue:(nullable NSOperationQueue *)queue; //引數3 - queue : 代理方法執行列隊

啟動任務方法

- (void)resume; //發起任務之後一定要用此方法開啟任務

通過Request發起下載任務方法

- (NSURLSessionDownloadTask *)downloadTaskWithRequest:(NSURLRequest *)request;

- (NSURLSessionDownloadTask *)downloadTaskWithRequest:(NSURLRequest *)request 

completionHandler:(void (^)(NSURL * _Nullable location, 

NSURLResponse * _Nullable response, 

NSError * _Nullable error))completionHandler;

通過URL發起下載任務方法

- (NSURLSessionDownloadTask *)downloadTaskWithURL:(NSURL *)url;

- (NSURLSessionDownloadTask *)downloadTaskWithURL:(NSURL *)url 

completionHandler:(void (^)(NSURL * _Nullable location, 

NSURLResponse * _Nullable response, 

NSError * _Nullable error))completionHandler;

通過ResumeData發起下載任務

- (NSURLSessionDownloadTask *)downloadTaskWithResumeData:(NSData *)resumeData;

- (NSURLSessionDownloadTask *)downloadTaskWithResumeData:(NSData *)resumeData 

 completionHandler:(void (^)(NSURL * _Nullable location, 

 NSURLResponse * _Nullable response, 

 NSError * _Nullable error))completionHandler;


NSURLSessionDownloadDelegate方法 :

下載過程中呼叫

- (void)URLSession:(NSURLSession *)session  //引數1 - session : 呼叫的下載任務

downloadTask:(NSURLSessionDownloadTask *)downloadTask //引數2 - downloadTask : 下載的任務資訊

                          didWriteData:(int64_t)bytesWritten //引數3 - bytesWritten : 本次下載的位元組

                   totalBytesWritten:(int64_t)totalBytesWritten //引數4 - totalBytesWritten : 已下載的總位元組

    totalBytesExpectedToWrite:(int64_t)totalBytesExpectedToWrite; //引數5 - totalBytesExpectedToWrite : 預計要下載的總位元組

下載完成後呼叫

- (void)URLSession:(NSURLSession *)session  //引數1 - session : 呼叫的下載任務

downloadTask:(NSURLSessionDownloadTask *)downloadTask //引數2 - downloadTask : 下載的任務資訊

 didFinishDownloadingToURL:(NSURL *)location; //引數3 - location : 下載完成後的檔案路徑資訊


相關文章