cancelAllOperations 不适用于 [NSOperationQueue mainQueue]

发布于 2024-12-22 13:28:18 字数 172 浏览 0 评论 0原文

cancelAllOperations() 不适用于 mainQueue(cancel() 方法不会在 NSOperation 对象上调用)。我错过了什么吗? 我必须遍历所有操作并调用 cancel() 方法才能使其正常工作。

cancelAllOperations() doesn't work on the mainQueue (the cancel() method is not called on the NSOperation object). Am I missing something?
I have to iterate through all operations and call the cancel() method to get it work.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

枫林﹌晚霞¤ 2024-12-29 13:28:18

我还可以确认 cancelAllOperations 不适用于 [NSOperationQueue mainQueue] (至少在我的 iOS 5.0 模拟器上)。可能是故意这样设计的,因为它是一个共享实例。

我的简单解决方法就是子类 NSOperation 或 NSBlockOperation 而不覆盖任何内容,然后执行如下操作:

-(void)cancelMyOperationsInMainQueue {    
    for (NSOperation* o in [[NSOperationQueue mainQueue] operations]) {
        if ([o isKindOfClass:[MyOperation class]]) {
            [o cancel];
        }
    }
 }

I can also confirm that cancelAllOperations does not work on [NSOperationQueue mainQueue] (at least on my iOS 5.0 Simulator). Might be intentionally designed like that since it is a shared instance.

My simple workaround is just to subclass NSOperation or NSBlockOperation without overriding anything and then do something like this:

-(void)cancelMyOperationsInMainQueue {    
    for (NSOperation* o in [[NSOperationQueue mainQueue] operations]) {
        if ([o isKindOfClass:[MyOperation class]]) {
            [o cancel];
        }
    }
 }
牵强ㄟ 2024-12-29 13:28:18

是的,还可以确认它不会对操作调用取消方法,它只是设置 isCancelled = YES

我的解决方案:[[[NSOperationQueue mainQueue] actions] makeObjectsPerformSelector:@selector(cancel)] ;

Yeah can also confirm it doesn't call cancel method on the operations, it just sets isCancelled = YES

My solution: [[[NSOperationQueue mainQueue] operations] makeObjectsPerformSelector:@selector(cancel)];

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文