在我的应用程序中,我通过循环遍历我想要执行某些操作的文件数组,将并发操作添加到我的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'。有关如何确保队列真正完成以及所有操作已结束的任何建议?谢谢。干杯,特隆德
答案 0 :(得分:2)
您可能希望在使用setSuspended添加它们时阻止所有操作:
- (void)setSuspended:(BOOL)suspend;
因此,在添加所有操作之前,请将其设置为YES,完成后将其设置为NO。