美文网首页技术文OC学习iOS OC 学习手册
利用NSURLSessionDownloadTask实现的下载器

利用NSURLSessionDownloadTask实现的下载器

作者: 让代码飞 | 来源:发表于2018-05-30 14:23 被阅读5次

    站在巨人的肩膀上深入了解了一下下载,下载实现的方式有很多种,但是基于系统提供的NSURLSessionDownloadTask实现起来更简单,快捷,达到的效果还是不错的。本篇主要实现了断点下载、后台下载、程序杀死启动之后继续下载等。[demo](https://pan.baidu.com/s/140F2urS9RtViEqR8-YFxog

    讲一下NSURLSessionDownloadTask

    知道它的前提是必然知道NSURLSession
    NSURLSession 作为iOS7的一个新特性,它积极进化,除了保留NSURLConnection的基本组件NSURLRequest,NSURLCache,也增加NSURLSessionConfiguration和NSURLSessionTask(包含:
    NSURLSessionDataTask: 普通的网络数据请求
    NSURLSessionUploadTask: 上传
    NSURLSessionDownloadTask: 下载
    NSURLSessionDownloadTask 优点以下几个
    a.不受苹果后台设置的时间的限制,可以在程序退到后台后继续session中未完成的task,直到全部完成退出后台.
    b.在服务器满足苹果API要求的情况下,让断点续传摆脱bytes=%llu-,更简单易用
    c.在下载大的文件时做了相应的优化.之前为了避免下载的大的文件都存放在内存中导致内存激增,通常的优化方案是存入沙盒 ,然后依次拼接. NSURLSessionDownloadTask就是体贴到帮你解决这个问题(在下载过程中,打开沙盒文件,可以看到很多的.tmp临时文件),而我们需要做的就是在下载完成的时候,在相应的回调中把拼接完成的文件移动/拷贝到指定的文件夹下(使用AFNetWorking 则只需要指出存放的最终路径)
    

    几个要用到的代理方法

    //下载成功的回调
    - (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask
    didFinishDownloadingToURL:(NSURL *)location{
    //location是一个下载时候的开辟的临时地址,下载成功之后将文件放到自己指定的地址
     }
    
    //请求完毕之后的方法,这里可以检测到下载失败
    - (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task
    didCompleteWithError:(nullable NSError *)error{
    }
    
    //拿到下载的进度
    - (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask
          didWriteData:(int64_t)bytesWritten
     totalBytesWritten:(int64_t)totalBytesWritten
    totalBytesExpectedToWrite:(int64_t)totalBytesExpectedToWrite{
    }
    //暂停下载
        [model.task cancelByProducingResumeData:^(NSData * _Nullable resumeData) {
          //resumeData当前下载的到哪里的信息
            model.resumeData = resumeData;
        }];
    //恢复下载
    [self.session downloadTaskWithResumeData:model.resumeData]
    

    唉,本人渣渣一个,好多问题不懂,都是借鉴别人的东西,一点点的看,具体的代码就不贴了,没有太大的意思,如果确实有需要可以去下载一个。

    相关文章

      网友评论

        本文标题:利用NSURLSessionDownloadTask实现的下载器

        本文链接:https://www.haomeiwen.com/subject/snitsftx.html