objective-c - 应用程序在分配队列时阻塞

标签 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];
    }
}

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

谢谢

最佳答案

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

关于objective-c - 应用程序在分配队列时阻塞,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10320375/

相关文章:

swift - observeSingleEvent 不会在 swift 循环下被调用

ios - 如何在 iOS 的 openfire/xmpp 中获取所有在线用户的列表?

ios - 如何使用 XMPPFramework 确保我的 XMPP 用户没有 vCard?

objective-c - Xcode 4.5.2 - OS X 应用程序 - 将 webview 链接到代码,加载手动编码的主页

ios - 当键盘显示 AutoLayout 时 UIView 没有向上移动

objective-c - 如何在 iOS 中使用 AssistiveTouch UI

ios - 如何在 Firebase observeEvent block iOS 中更新 UI

ios - 是否可以使用 Quartz 2D 在另一个线程上制作 UIImage ?

ios - 如何在xmpp中获取用户的存在

iOS 将数组添加到 Plist 文档根目录