我使用 XMPPFramework,在它的代码中有一个像这样的方法:
- (NSDictionary *)occupants
{
if (dispatch_get_current_queue() == moduleQueue)
{
return occupants;
}
else
{
__block NSDictionary *result;
dispatch_sync(moduleQueue, ^{//IT BLOCKS HERE, WITHOUT MESSAGE
result = [occupants copy];
});
return [result autorelease];
}
}
[编辑] 它不一致地阻塞,但并非总是如此,因为应用程序没有执行任何操作,我暂停它,我看到线程已停止在那里,并且它永远不会继续执行。 怎么了?有什么想法吗?
谢谢
最佳答案
您解释的行为与您在主线程上尝试通过 GCD 在主线程上发送执行操作时出现的行为完全匹配。所以你应该检查 moduleQueue 是否是主队列,然后就是它了。尝试检查是否是主队列,如果是,则跳过dispatch_sync block 。
关于objective-c - 应用程序在分配队列时阻塞,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10320375/