iOS開發(fā)-NSURLSessionDownloadTask文件下載(不設(shè)置代理)

關(guān)于下載問題,在前面講解NSURLConnection實(shí)現(xiàn)文件下載時(shí),使用block回調(diào)我們會(huì)遇到內(nèi)存猛增以及無法獲取下載進(jìn)度的問題,最終、我們可以通過設(shè)置代理來獲取進(jìn)度信息和邊下邊寫數(shù)據(jù)來解決以上問題。iOS 9以后,蘋果棄用NSURLConnection發(fā)起網(wǎng)絡(luò)請(qǐng)求,取而代之的是NSURLSession。NSURLSession中的相應(yīng)方法已經(jīng)做到了邊下邊寫數(shù)據(jù)。這篇我們先說一說通過block回調(diào)來實(shí)現(xiàn)文件下載的方法:

注意:
與CAAnimation、NSOperation一樣,NSURLSessionTask也是抽象類,不具備操作的能力,使用過程中只能使用其子類:


NSURLSessionTask.png

NSURLSessionDownloadTask回調(diào)實(shí)現(xiàn)文件下載

//優(yōu)點(diǎn):不需要擔(dān)心內(nèi)存
//缺點(diǎn):無法監(jiān)聽文件下載進(jìn)度
-(void)download
{
    //1.url
    NSURL *url = [NSURL URLWithString:@"http://120.25.226.186:32812/resources/images/minion_03.png"];
    
    //2.創(chuàng)建請(qǐng)求對(duì)象
    NSURLRequest *request = [NSURLRequest requestWithURL:url];
    
    //3.創(chuàng)建session
    NSURLSession *session = [NSURLSession sharedSession];
    
    //4.創(chuàng)建Task
    /*
     第一個(gè)參數(shù):請(qǐng)求對(duì)象
     第二個(gè)參數(shù):completionHandler 回調(diào)
        location:臨時(shí)存放路徑 NSURL類型,遵循file://協(xié)議
        response:響應(yīng)頭信息
        error:錯(cuò)誤信息
     */
    //該方法內(nèi)部已經(jīng)實(shí)現(xiàn)了邊接受數(shù)據(jù)邊寫沙盒(tmp)的操作
    NSURLSessionDownloadTask *downloadTask = [session downloadTaskWithRequest:request completionHandler:^(NSURL * _Nullable location, NSURLResponse * _Nullable response, NSError * _Nullable error) {
       
        //6.處理數(shù)據(jù)  block所在線程為子線程
        NSLog(@"%@---%@",location,[NSThread currentThread]);
        
        //6.1 拼接文件全路徑 : 保存在tmp目錄下得文件隨時(shí)都回被刪除,因此需要移動(dòng)文件
        NSString *fullPath = [[NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:response.suggestedFilename];
        
        //6.2 剪切文件
        [[NSFileManager defaultManager]moveItemAtURL:location toURL:[NSURL fileURLWithPath:fullPath] error:nil];
        NSLog(@"%@",fullPath);
    }];
    
    //5.執(zhí)行Task
    [downloadTask resume];
}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容