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