应用程序阻塞,同时datching队列

时间:2012-04-25 12:30:35

标签: objective-c grand-central-dispatch xmppframework

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

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

由于

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:0)

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