NSURLSession,多数据任务,completionHandler
Posted
技术标签:
【中文标题】NSURLSession,多数据任务,completionHandler【英文标题】:NSURLSession, multiple data tasks, completionHandler 【发布时间】:2015-10-11 00:24:13 【问题描述】:我想使用 NSURLSession
和 dataTaskWithURL:completionHandler:
将 4 个不同的 URL 下载到 NSData
对象中。我知道我可以打电话:
[session dataTaskWithURL completionHandler:^(NSData* data, NSURLResponse* response, NSError* error)
// handler
];
一旦将这些添加到会话中,我知道我可以使用[task resume]
开始它们。有什么方法可以让会话简单地启动我添加到其中的所有任务?
但是当所有四个都完成时(出现错误或其他情况),我怎样才能得到通知?我是否需要保留某种线程安全字典来跟踪每个任务的状态?
我的目的是,一旦下载了这些,我需要启动一个计时器,以便将来某个时候可以再次下载相同的四个 URL。
【问题讨论】:
【参考方案1】:不,无法同时启动多个任务。
是的,您需要保留一个字典来存储响应,使用数据任务作为键。为安全起见,在主线程上执行所有修改和访问。
您也可以考虑使用调度组,如this question 中所述。
【讨论】:
以上是关于NSURLSession,多数据任务,completionHandler的主要内容,如果未能解决你的问题,请参考以下文章
使用 NSURLSession 如何在取消下载任务时获取接收到的数据或临时文件位置
iOS NSURLSession 使用自定义委托处理数据任务的完成
我们可以为 NSURLSessionTaskDelegate 设置一个自定义委托对象吗