在我的应用程序中,我通过循环要执行某些操作的文件数组,将并发操作添加到我的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'。关于如何确保队列确实完成并且所有操作已结束的任何建议?谢谢。干杯,特隆

最佳答案

您可能想在使用setSuspended添加操作时阻止所有操作:

- (void)setSuspended:(BOOL)suspend;


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

10-08 18:48