目标c - Central Grand Dispatcher:在不同的队列/块中运行相同的方法



为什么我的代码崩溃?

    dispatch_async(queue_A, ^{
    @synchronized(self) {
        NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
        [self logInfo:@"queue_A"];
        [pool release];        
    }
});
dispatch_async(queue_B, ^{
    @synchronized(self) {
        NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
        [self logInfo:@"queue_B"];
        [pool release];        
    }
});

您最好避免在dispatch_async中使用@syncronized,正如评论中建议的那样。如果调用[self logInfo:...]不安全,那么您可能需要:

  1. 使用调度组来确保多个dispatch_async()调用一个资源不会使你的应用程序崩溃。Mike Ash有一个很好的关于这个技术的文章。看看他的例子。
  2. 使用调度信号量强制单独的调用等待对方完成。

我不确定logInfo在这种情况下做什么,所以你也可以重写它

问题解决了

访问UI必须通过主队列ONLY

最新更新