NSURLSession的簡單使用步驟
通常使用NSURLSessionTask的子類來創(chuàng)建任務(wù)
NSURLSession對象的獲取方法
獲取全局的NSURLSession對象(無法設(shè)置代理)
+ (NSURLSession *)sharedSession通過NSURLSessionConfiguration獲取(可以設(shè)置代理),NSURLSessionConfiguration類通常用來設(shè)置一些請求參數(shù)
+ (NSURLSession *)sessionWithConfiguration:(NSURLSessionConfiguration *)configuration delegate:(nullable id <NSURLSessionDelegate>)delegate delegateQueue:(nullable NSOperationQueue *)queue常用的屬性
常用的方法(任務(wù)的狀態(tài)控制)
任務(wù)優(yōu)先級屬性priority的取值
NSURLSessionTask
NSURLSessionDownloadTask,提供了一個取消任務(wù)的方法,但是會保存用于以后繼續(xù)任務(wù)的信息,方法如下:
- (void)cancelByProducingResumeData:(void (^)(NSData * __nullable resumeData))completionHandler;NSURLSessionDataDelegate,遵守NSURLSessionTaskDelegate協(xié)議,是網(wǎng)絡(luò)請求通常遵循的協(xié)議,常用的方法:
接受到服務(wù)響應(yīng)時調(diào)用的方法
- (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveResponse:(NSURLResponse *)response completionHandler:(void (^)(NSURLSessionResponseDisposition disposition))completionHandler;/*** 必須在該方法中對服務(wù)器的響應(yīng)進行授權(quán),才能繼續(xù)接收服務(wù)器返回的數(shù)據(jù),調(diào)用如下函數(shù)* completionHandler(NSURLSessionResponseAllow)*/接收到服務(wù)器返回的數(shù)據(jù)時調(diào)用的方法
- (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveData:(NSData *)data/*** data:服務(wù)返回的數(shù)據(jù),通常為JSON格式數(shù)據(jù)*/請求完成時調(diào)用的方法(成功或失敗)
- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(nullable NSError *)error/*** 若出現(xiàn)錯誤,error中存放錯誤信息*/NSURLSessionDownloadDelegate(通常用于下載大量數(shù)據(jù)),遵守NSURLSessionTaskDelegate協(xié)議,常用的方法:
寫入數(shù)據(jù)到臨時文件時調(diào)用的方法(服務(wù)器返回一點就寫入一點)
- (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didWriteData:(int64_t)bytesWritten totalBytesWritten:(int64_t)totalBytesWritten totalBytesExpectedToWrite:(int64_t)totalBytesExpectedToWrite/*** totalBytesWritten,已寫入數(shù)據(jù)的總長度* totalBytesExpectedToWrite:總共要寫入數(shù)據(jù)的總長度* 可以在該方法中計算下載進度*/遇到錯誤的時候調(diào)用
- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error/***error:若遇到錯誤,則保存錯誤信息*/用于斷點下載的方法
- (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didResumeAtOffset:(int64_t)fileOffset expectedTotalBytes:(int64_t)expectedTotalBytes/*** fileOffset:繼續(xù)下載時,文件的開始位置* expectedTotalBytes:剩余的數(shù)據(jù)總數(shù)*/下載完成時調(diào)用的方法
- (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didFinishDownloadingToURL:(NSURL *)location/*** location:下載的文件保存的臨時位置* 需要將下載的文件保存在可以長期保存的位置*/Block回調(diào)的方式
獲取NSURLSession對象
NSURLSession *session =[NSURLSession sharedSession];創(chuàng)建請求任務(wù)
NSURLSessionTask *task = [session downloadTaskWithURL:(此處為請求的URL路徑) completionHandler:^(NSURL *location, NSURLResponse *response, NSError *error) { //此處為請求任務(wù)完成后的回調(diào)Block,即:任務(wù)完成后會執(zhí)行這里的代碼 }];啟動任務(wù)
[task resume];代理的方式
獲得NSURLSession對象
NSURLSession *session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration] delegate:self delegateQueue:[[NSOperationQueue alloc] init]];創(chuàng)建請求任務(wù)
NSURLSessionTask *task = [session dataTaskWithRequest:(此處為NSURLRequest對象)];啟動任務(wù)
[task resume];實現(xiàn)代理方法做進一步處理
新聞熱點
疑難解答