使用NSURLSession程序退出后继续下载

本文介绍了在iOS中如何利用NSURLSession实现程序退出后继续下载的功能。通过分析NSURLSession的downloadTaskWithResumeData接口和取消任务时产生的resumeData,发现其内部包含下载地址和已下载字节信息。通过打印resumeData发现其为一个plist文件,从而可以通过构造plist实现断点续传。同时,结合AFNetworking3.0解决临时文件路径问题,利用runtime接口获取内部临时文件地址属性。
摘要由CSDN通过智能技术生成

iOS 7发布了 NSURLSession,在Xcode7.x里面 NSURLConnection有效范围是iOS 2 - iOS 9,估计在iOS 10也将继续支持,但是NSURLSessison从iOS 7开始支持的,所以还是尽快替换吧。我在整理的时候发现NSURLSession下载文件的接口如下:

- (NSURLSessionDownloadTask *)downloadTaskWithRequest:(NSURLRequest *)request;

手动点暂停后保存下载的data,继续下载,接口代码如下:

//NSURLSessionDownloadTask 手动暂停
- (void)cancelByProducingResumeData:(void (^)(NSData * __nullable resumeData))completionHandler;
//继续下载
- (NSURLSessionDownloadTask *)downloadTaskWithResumeData:(NSData *)resumeData;

可是当我们遇到程序退出再加载进来依然需要保持断点下载的需求我们该怎么做?“这个功能实现不了!“,在我们iOS程序猿这没有实现不了的需求,OK,我们来分析下如何实现。
看NSURLSession的头文件,只有downloadTaskWithResumeData这个函数,参数NSData,那就简答明了了,很明显data里面肯定会包涵下载地址,下载了多少字节等信息,直接打印出cancelByProducingResumeData函数返回的resumeData:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>NSURLSessionD
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值