应用程序块而dipatching队列(App blocks while dipatching a q

2019-06-23 22:45发布

即时通讯使用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];
    }
}

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

谢谢

Answer 1:

你完全解释的行为与当您尝试通过GCD发送执行对主线程的操作,同时在主线程中出现的一个相匹配。 所以,你应该检查是否moduleQueue是主队列,那么这就是它。 请检查是否是主队列如果是,跳过dispatch_sync块。



Answer 2:

有时块需要保留的变量,以确保它们可用时会执行。 如果你使用一个块中的局部变量,你应该把它初始化到您声明它的块外为零。



文章来源: App blocks while dipatching a queue