iOS使用NSOperationQueue和AFNetworking实现多重下载功能
问题描述:
我正在使用NSOperationQueue和AFNetworking来为我的项目实现多重下载功能。我也使用核心数据来坚持下载的信息,但我对这部分还是没问题。我的问题是当涉及到实际创建下载任务。所以这里是我如何做到这一点:iOS使用NSOperationQueue和AFNetworking实现多重下载功能
// 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将开始运行。
我的问题是如何让我的队列中的其他操作运行后,我暂停像我上面解释的运行操作?
另外,我会非常感激,如果你能解释一下实现多下载一个更好的方法(特别是涉及到管理下载任务,暂停/恢复下载任务的最大数量)
答
解决方案:
只需使用cancel
即可暂停操作(当您的操作中取消标志为“YES”时,您需要处理这种情况才能真正让操作退出)。然后,我所期望的队列行为中的所有操作(取消一个操作,然后另一个正在等待的操作)
而且当您需要恢复下载时,只需创建一个新的操作,将内容从web抓取到同一本地文件路径。 (在AFDownloadRequestOperation
的帮助下,恢复下载效果很好)
现在我的多下载系统运行良好,如果您需要关于实现的信息,请发表评论。