为什么我的代码崩溃?
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:...]
不安全,那么您可能需要:
- 使用调度组来确保多个
dispatch_async()
调用一个资源不会使你的应用程序崩溃。Mike Ash有一个很好的关于这个技术的文章。看看他的例子。 - 使用调度信号量强制单独的调用等待对方完成。
我不确定logInfo在这种情况下做什么,所以你也可以重写它
问题解决了
访问UI必须通过主队列ONLY