我该如何调试wait_fences错误

时间:2012-07-12 18:02:34

标签: ios multithreading wait-fences

wait_fences:未收到回复:10004003

我继续收到此错误。它发生在我的应用程序启动时。我该如何调试此问题。有什么办法我可以看看wait_fences并看看那里发生了什么。有什么方法可以看出哪些线程阻塞了什么?

感觉这个错误只不过是一个黑洞,没有任何工具或信息进入或离开虚空。

任何有关于调试此错误的提示的人都将不胜感激。

我现在已经改变了我的线程,所有线程调用都通过这个方法设置来完成所有的调度

注意:此外,我希望你们不会因为你已经看到关于这个问题的另一个问题而投票结束我的问题。没有关于此错误的真实信息。我需要知道导致此错误的原因和/或如何调试它。不是常见的“将超级调用添加到您的viewDidAppear等等。如果这些有帮助,我就不会问这个问题。

+ (void) ensureDispatchOfBlock:(dispatch_block_t) block onQueue:(dispatch_queue_t) queue  async:(BOOL) async{
    if (dispatch_get_current_queue() == queue){
        block();
    }
    else {
        if (async){
            dispatch_async(queue, block);
        }
        else {
            dispatch_sync(queue, block);
        }
    }
}

+ (void) ensureDispatchOnMainThread:(dispatch_block_t) block async:(BOOL) async{
    [self ensureDispatchOfBlock:block onQueue:dispatch_get_main_queue() async:async];
}

+ (BOOL) addBlock:(dispatch_block_t) block toQueue:(dispatch_queue_t) queue async:(BOOL) async {
    if (!async && dispatch_get_current_queue() == queue){
        return NO;
    }
    if (async){
        dispatch_async(queue, block);
    }
    else {
        dispatch_sync(queue, block);
    }
    return YES;
}

2 个答案:

答案 0 :(得分:1)

该错误通常是由于尝试动画在屏幕上不可见的内容而产生的。如果它在发布时发生,我猜你正试图在viewDidLoad中启动动画。

答案 1 :(得分:0)

我会寻找缺少对超级视图(已/将要)的调用。如果省略这些,你会看到“等待围栏”,无论这意味着什么。