前言:
1、回顾NSURLSessionTask
2、NSURLSessionDownloadTask大文件之block下载
3、NSURLSessionDownloadTask大文件之代理方法下载
4、NSURLSessionDownloadTask大文件之代理方法实现断点续传下载
1.回顾NSURLSessionTask:
使用NSURLSession就需要用到NSURLSessionTask,所以关于Task的类和其子类的关系还是要了解的:
image.png
2.NSURLSessionDownloadTask大文件之block下载
测试的API接口:[http://120.25.226.186:32812/resources/images/minion_08.png](http://120.25.226.186:32812/resources/images/minion_08.png) (因为Block的缺点,所以这里用并不打算图片文件作为测试)
2-1、类、方法、属性介绍:
NSURLSession
+(NSURLSession*)sharedSession; 单例,直接创建会话session对象
-(NSURLsessionDownloadTask*)downloadTaskWithURL:completionHandler:; 根据URL来创建会话的下载任务downloadTask,完成的话回调block
NSURLsessionDownloadTas
- (void)resume;
2.2源码下载:
image.png2.3 Block的缺点:
Block下载方式不适合大文件下载,因为该方法需要等到文件下载完毕了,
才会回调completionHandler后面的block参数,
然后才可以在这个block参数可以获取location(文件下载缓存的路径)、response(响应)、error(错误信息)。
这样的话,对于大文件,我们就无法实时的在下载过程中获取文件的下载进度了。
2.NSURLSessionDownloadTask大文件之代理方法下载
测试的API接口:[http://120.25.226.186:32812/resources/videos/minion_02.mp4](http://120.25.226.186:32812/resources/videos/minion_02.mp4) (这回用的是大文件哦,但也不会太大,本篇基础练习用,不会让你下载都要花个好几十分钟以上的时间😉)
3-1、类、方法、属性:
NSURLSession
+(NSURLSession*)sessionWithConfiguration:delegate:delegateQueue:; 根据会话配置对象并设置代理和代理的执行队列来创建会话NSURLSession对象
- (NSURLSessionDownloadTask*)downloadTaskWithURL; 根据URL直接创建会话的任务
NSURLSessionConfiguration
+(NSURLSessionConfiguration*)defaultSessionConfiguration; 创建默认的会话配置对象
NSURLSessionDownloadTask
- (void)resume 执行会话任务
协议和代理方法:
<NSURLSessionDownloadDelegate>
-(void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didWriteData:(int64_t)bytesWritten totalBytesWritten:(int64_t)totalBytesWritten totalBytesExpectedToWrite:(int64_t)totalBytesExpectedToWrite
session当前会话 downloadTask当前会话任务 bytesWritten本次写入数据大小 totalBytesWritten已经写入数据大小 totalBytesExpectedToWrite要下载的文件总大小
-(void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didResumeAtOffset:(int64_t)fileOffset expectedTotalBytes:(int64_t)expectedTotalBytes
didResumeAtOffset恢复下载时调用的代理方法
-(void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didFinishDownloadingToURL:(NSURL *)location
didFinishDownloadingToURL:(NSURL *)location 内部已经实现了边下载边写入数据到沙盒的操作
downloadTask 内部时可以拿到响应头信息
-(void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error
请求失败返回错误信息调用的代理方法
3.2源码实现:
image.png
网友评论