iOS使用NSOperationQueue和AFNetworking实现多下载功能

时间:2014-10-30 09:37:18

标签: ios afnetworking-2 nsoperation nsoperationqueue

我正在使用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 个答案:

答案 0 :(得分:0)

解决方案:

只需使用cancel暂停操作(当您的操作中取消标志为“YES”时,您需要处理实际让操作退出的情况)。然后,队列行为中的所有操作都符合我的预期(取消一个操作,然后另一个等待操作)

当您需要继续下载时,只需创建一个新操作,将内容从Web提取到同一本地文件路径。 (在AFDownloadRequestOperation的帮助下,恢复下载效果很好)

现在我的多下载系统运行良好,如果您需要有关实施的信息,请发表评论。