我正在使用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];
}
}
[编辑] 它不一致地阻止,并不总是,因为应用程序没有做任何事我暂停它,我看到线程已停在那里,它永远不会继续执行。 怎么了?有什么想法吗?
由于
答案 0 :(得分:3)
您解释的行为与您尝试在主线程上通过GCD在主线程上执行操作时出现的行为完全匹配。所以你应该检查moduleQueue是否是主队列,然后就是这样。尝试检查它是否是主队列,跳过dispatch_sync块。
答案 1 :(得分:0)
块有时需要保留变量以确保它们在执行时可用。如果在块中使用局部变量,则应将其初始化为零,并在块外部声明它。