3.NSURLSessionDownloadTask文件下载

前言:

1、回顾NSURLSessionTask
2、NSURLSessionDownloadTask大文件之block下载
3、NSURLSessionDownloadTask大文件之代理方法下载
4、NSURLSessionDownloadTask大文件之代理方法实现断点续传下载

1.回顾NSURLSessionTask:

使用NSURLSession就需要用到NSURLSessionTask,所以关于Task的类和其子类的关系还是要了解的:


3.NSURLSessionDownloadTask文件下载_第1张图片
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源码下载:

3.NSURLSessionDownloadTask文件下载_第2张图片
image.png

2.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                                 执行会话任务
       协议和代理方法:
     
    -(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源码实现:


3.NSURLSessionDownloadTask文件下载_第3张图片
image.png

4、NSURLSessionDownloadTask大文件之代理方法实现断点续传下载

你可能感兴趣的:(3.NSURLSessionDownloadTask文件下载)