如何确保NSOperationQueue真的是空的

时间:2013-02-22 19:16:17

标签: objective-c macos cocoa nsoperation nsoperationqueue

在我的应用程序中,我通过循环遍历我想要执行某些操作的文件数组,将并发操作添加到我的NSOperationQeueu。我想知道队列何时为空并且所有操作都已完成所以我使用(缩短版本):

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context{

        if (object == myLocalModeController.myFileobjectsQueue && [keyPath isEqualToString:@"operations"]) {


        if ([myLocalModeController.myFileobjectsQueue.operations count] == 0) {
            NSLog(@"Local: Fileobject creation has completed");  
          }
        }
     }

我的问题是,有时操作是如此轻量级,以至于在队列仍被添加时它们会立即完成。这导致频繁发生,其中队列中的项目数为零,但操作尚未完成。但是,根据我当前的设置,该程序认为操作已经完成,因为[myLocalModeController.myFileobjectsQueue.operations count] == 0'。有关如何确保队列真正完成以及所有操作已结束的任何建议?谢谢。干杯,特隆德

1 个答案:

答案 0 :(得分:2)

您可能希望在使用setSuspended添加它们时阻止所有操作:

- (void)setSuspended:(BOOL)suspend;

因此,在添加所有操作之前,请将其设置为YES,完成后将其设置为NO。