0

我使用 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];
    }
}

[编辑] 它不一致地阻塞,并非总是如此,因为应用程序没有做任何事情我暂停它,我看到线程已经停止在那里,它永远不会继续执行。怎么了?有任何想法吗?

谢谢

4

2 回答 2

3

您解释的行为与您在主线程上尝试通过 GCD 在主线程上执行操作时出现的行为完全匹配。所以你应该检查 moduleQueue 是否是主队列,那么就是这样。尝试检查它是否是主队列,如果是,则跳过 dispatch_sync 块。

于 2012-04-25T17:10:11.430 回答
0

块有时需要保留变量以确保它们在执行时可用。如果在块内使用局部变量,则应在块外声明它时将其初始化为零。

于 2012-04-25T13:14:38.563 回答