objective-c - 如何确保 NSOperationQueue 确实为空

标签 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”以来操作已完成。关于如何确保队列确实完成并且所有操作都已结束有什么建议吗?谢谢。干杯,特隆德

最佳答案

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

- (void)setSuspended:(BOOL)suspend;

因此,在添加所有操作之前,请将其设置为"is",完成后将其设置为“否”。

关于objective-c - 如何确保 NSOperationQueue 确实为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15031605/

相关文章:

objective-c - Xcode-将 Objective C 文件导入 C 文件

ios - 如何使用 NSRange 创建 NSArray 的子数组?

ios - 如何在 AfNetworking 3.0 中为请求添加 Headers?

objective-c - 处理包含文本字段和 ScrollView 的 Cocoa View 中的选项卡

python - 使 OSX 中的 matplotlib 在虚拟环境中工作的最简单方法是什么?

iphone - 如何在相关 View Controller 中获取我的 tabbarcontroller 的选定索引?

objective-c - 如何以编程方式取消隐藏 mac os 中的隐藏应用程序?

objective-c - 如何在通过 RESTKIT 映射之前更改 JSON

c++ - 在 Mac Yosemite 中设置系统范围路径

swift - Swift 中抛出错误的函数或方法