iOS 使用 NSOperationQueue 和 AFNetworking 实现多下载功能
Posted
技术标签:
【中文标题】iOS 使用 NSOperationQueue 和 AFNetworking 实现多下载功能【英文标题】:iOS using NSOperationQueue and AFNetworking to implement multi-download feature 【发布时间】:2014-10-30 09:37:17 【问题描述】:我正在使用 NSOperationQueue 和 AFNetworking 为我的项目实现多下载功能。我也使用 Core Data 来保存下载的信息,但我对那部分没问题。我的问题是在实际创建下载任务时。所以我是这样做的:
// create a NSOperationQueue
NSOperationQueue *queue = [[NSOperationQueue alloc] init];
queue.name = @"DownloadQueue";
queue.maxConcurrentOperationCount = 1;
// create an operation (AFDownloadRequestOperation is a subclass of AFHTTPRequestOperation)
AFDownloadRequestOperation *operation = // some initializations
// add the operation to the queue
[queue addOperation:operation];
// later some more operations are created and added to the queue
然后说我在队列中添加了 3 个操作。由于我将maxConcurrentOperationCount
设置为1,所以队列中只有1个操作在运行,其他2个在等待:
operation 1: running
operation 2: waiting
operation 3: waiting
然后我使用pause
(这是AFURLConnectionOperation
的方法)暂停正在运行的操作,我希望看到2个等待操作之一开始运行,但它没有发生,2个等待操作仍在等待:
operation 1: paused
operation 2: waiting
operation 3: waiting
我仍然需要恢复操作 1 并等待它完成,然后操作 2 或 3 将开始运行。
我的问题是如何让队列中的其他操作在我暂停运行操作后运行?
另外,如果您能解释实现多下载的更好方法(具体与管理下载任务的最大数量、暂停/恢复下载任务有关),我将不胜感激
【问题讨论】:
【参考方案1】:解决方案:
只需使用cancel
暂停操作(您需要处理操作中取消标志为“YES”的情况才能真正让操作退出)。然后队列中的所有操作都按照我的预期行为(取消一个操作,然后另一个等待的操作开始运行)
当您需要继续下载时,只需创建一个新操作,将内容从 Web 提取到相同的本地文件路径。 (在AFDownloadRequestOperation
的帮助下,恢复下载效果很好)
现在我的多下载系统运行良好,如果您需要有关实施的信息,请发表评论。
【讨论】:
以上是关于iOS 使用 NSOperationQueue 和 AFNetworking 实现多下载功能的主要内容,如果未能解决你的问题,请参考以下文章
使用 NSOperationQueue 执行 iOS 应用程序初始化
iOS多线程总结——NSOperation与NSOperationQueue的使用