NSURLSessionDownloadTask - 串行下载多个文件

Posted

技术标签:

【中文标题】NSURLSessionDownloadTask - 串行下载多个文件【英文标题】:NSURLSessionDownloadTask - Serially download multiple files 【发布时间】:2015-02-02 01:19:14 【问题描述】:

使用NSURLSessionDownloadTask 连续下载文件列表的最佳做法是什么?

例如,是否最好在上一次下载完成后开始新的NSURLSession

- (void)startDownloadWithRequest:(NSURLRequest *)request

    NSURLSessionConfiguration *config = [NSURLSessionConfiguration defaultSessionConfiguration];
    NSURLSession *session = [NSURLSession sessionWithConfiguration:config delegate:self delegateQueue:nil];

    NSURLSessionDownloadTask *downloadTask = [session downloadTaskWithRequest:request];
    [downloadTask resume];


然后在委托完成后再次调用 -startDownload 并使用不同的请求。

- (void)URLSession:(NSURLSession *)session
      downloadTask:(NSURLSessionDownloadTask *)downloadTask
didFinishDownloadingToURL:(NSURL *)location

    NSURL *url = [NSURL URLWithString:@"http://asdf.com/Hello_world.pdf"];
    NSURLRequest *request = [NSURLRequest requestWithURL:url];

    [self startDownload:request];


自上次下载完成时调用-startDownloadWithRequest 以来,这种链接下载的方法是否会导致堆栈随着每个后续请求而增长?

我搜索了 SO 和其他网站,但找不到使用NSURLSessionDownloadTask 串行下载文件的替代方法。

【问题讨论】:

【参考方案1】:

如果要执行的任务在配置方面遵循相同的规则,则当然不需要创建新的会话(和配置)对象,例如超时、cookie 和缓存策略等

相反,这会适得其反,你为什么要分配做完全相同的事情的新对象?如果配置没有施加更严格的策略,您甚至可以通过 NSUrlRequest 覆盖会话配置的某些策略。

关于串行下载文件的最佳做法,您的设置看起来很可靠。

【讨论】:

我实际上使用的是 backgroundSessionConfiguration 而不是 defaultConfiguration,但是对于这个示例的 sack,我使用了 defaultConfiguration。我想它仍然可以工作,谢谢。

以上是关于NSURLSessionDownloadTask - 串行下载多个文件的主要内容,如果未能解决你的问题,请参考以下文章

NSURLSessionDownloadTask 进度回调不顺畅?

在 NSMutableDictionary 中设置 NSURLSessionDownloadTask

NSUrlSessionDownloadTask - 进入后台时出现didCompleteWithError

iOS开发之网络编程--2NSURLSessionDownloadTask文件下载

NSURLSessionDownloadTask 在挂起时继续下载

在下载字节时从 NSURLSessionDownloadTask 访问字节