ios NSOperationQueue,操作全部在添加时运行,不排队

时间:2011-08-08 20:43:51

标签: objective-c ios nsoperation nsoperationqueue

所以,我有一组当前一起运行的ASINetworkQueues,导致数据库保存时出现竞争条件。我正在尝试创建一个NSOperationQueue,它将对这些“子队列”中的每一个进行排队。我目前用一个主方法创建了一个NSOperation,它启动了“子队列”以开始下载。

我的问题是,每次使用“addOperation”将子队列添加到主队列时,它会立即触发“主”方法,以便我的子队列同时运行。我的印象是主要方法一次被解雇一次。即仅适用于队列顶部的操作。

也许我在这里遗漏了一些东西,但我似乎无法弄清楚如何阻止其他操作,直到第一个完成。此外,我甚至无法让我的程序进入导致NSOperation的isReady = 0的情况......总是回报是。

这里有一些代码:

注意:我已将NSOperation队列maxConcurrentOperations设置为1。

NSOperation主要方法:

-(void)main {
    [subQueue download];
}

设置队列:

ChapterDownloadOperation *cdo =  [[ChapterDownloadOperation alloc] init];
cdo.chapter = ch;
[chapterDownloadQueue addOperation:cdo];
[cdo release];

如果我添加多个操作,则main方法将在实例中触发,并将其添加到队列中。是否有另一个功能,我应该覆盖并使用该操作准备好摇滚。我有一种感觉,主要方法是设置操作。

任何想法都非常感激。

非常感谢。

2 个答案:

答案 0 :(得分:2)

NSOperationQueue只要能够平衡额外的处理能力,就会触发主方法。

要一次将队列限制为一个操作,您可以尝试在排队之前在每个操作之间添加依赖关系:     [B addDependency:A]; //直到A完成执行后才会调用[B main]

请注意,如果A被取消,B仍然会运行。

希望有所帮助!

答案 1 :(得分:0)