1:首先就是下載圖片
NSURLSessionConfiguration * config=[NSURLSessionConfiguration defaultSessionConfiguration];
//創(chuàng)建一個session
NSURLSession * session=[NSURLSession sessionWithConfiguration:config];
NSURL * url =[NSURL URLWithString:urlString];
//創(chuàng)建一個任務(wù)請求到data數(shù)據(jù)然后將其轉(zhuǎn)化成圖片
NSURLSessionDataTask * dataTask=[session dataTaskWithURL:url completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
self.imageView.image=[UIImage imageWithData:data];
}];
[dataTask resume];
2:主要談一下一些比較大的文件的下載
其實有很多第三方庫集成的很好,用法就不多說了,這里主要用系統(tǒng)自帶的URLSession進(jìn)行文件的下載
1:首先我們需要遵循NSURLSessionDownloadDelegate代理,因為要用到其代理方法獲取當(dāng)前進(jìn)度以及結(jié)束等狀態(tài)
2接著我們根據(jù)網(wǎng)址創(chuàng)建一個NSURL,然后創(chuàng)建Session的配置信息,接著就是創(chuàng)建Session,遵循其代理,然后執(zhí)行下載任務(wù)。
-(void)loadFileWithUrl:(NSString *)str
{
NSURL * url =[NSURL URLWithString:str];
NSURLSessionConfiguration * config =[NSURLSessionConfiguration defaultSessionConfiguration];
NSURLSession *session= [NSURLSession sessionWithConfiguration:config delegate:self delegateQueue:[NSOperationQueue mainQueue]];
NSURLSessionDownloadTask* downloadTask = [session downloadTaskWithURL:url];
[downloadTask resume];
}
3:其實主要處理還是在代理方法中
-(void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didFinishDownloadingToURL:(NSURL *)location{
}
這是結(jié)束的代理方法,這里主要處理下載結(jié)束后我們要進(jìn)行的操作
- (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask ? ?didWriteData:(int64_t)bytesWritten ? ? totalBytesWritten (int64_t)totalBytesWritten totalBytesExpectedToWrite:(int64_t)totalBytesExpectedToWrite
{
self.myPregress.progress = (double)totalBytesWritten/totalBytesExpectedToWrite;
self.pgLabel.text = [NSString stringWithFormat:@"下載進(jìn)度:%f",(double)totalBytesWritten/totalBytesExpectedToWrite];
}
這個是程序正在下載的代理方法,我們可以從其中獲取到當(dāng)前的進(jìn)度
參數(shù)*? @param bytesWritten? ? ? ? ? ? ? 這次寫入的大小
*? @param totalBytesWritten? ? ? ? 已經(jīng)寫入沙盒的大小
*? @param totalBytesExpectedToWrite 文件總大小
- (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask
didResumeAtOffset:(int64_t)fileOffset
expectedTotalBytes:(int64_t)expectedTotalBytes
{
}這個就是當(dāng)前的下載任務(wù)暫停后回復(fù)下載后調(diào)用的方法
3:下載的暫?;貜?fù)
1:暫停
__weak typeof(self) selfVc = self;
[self.downloadTask cancelByProducingResumeData:^(NSData *resumeData) {
//? resumeData : 包含了繼續(xù)下載的開始位置\下載的url
selfVc.resumeData = resumeData;
selfVc.downloadTask = nil;
}];
主要就是將當(dāng)前已經(jīng)下載的resumeData存儲下來,然后將downloadTask置為nil
2:回復(fù)
// 傳入上次暫停下載返回的數(shù)據(jù),就可以恢復(fù)下載
self.downloadTask = [self.session downloadTaskWithResumeData:self.resumeData];
[self.downloadTask resume]; // 開始任務(wù)
self.resumeData = nil;