iOS线程违规检测



在iOS上,我想知道是否有类似NSZombies标志的东西可以设置为在需要主线程时从后台线程调用API时检测/提升。

对于块,似乎很容易陷入这样一种情况,即对哪个线程正在做什么做出错误的假设或错误。调试标志可以检测何时从错误的线程进行调用,这对于查找这些情况非常有用。

我关心的主要是苹果的框架(Cocoa Touch)。

提交了一份错误报告,编号12180446。

在任何需要在主线程上的API中使用以下内容:

NSAssert([NSThread isMainThread], @"This must only be called on the main thread.");

苹果并没有提供这样一个涵盖所有UIKit的东西。您需要时需要调用它。

我做了一些更实用的事情。当我调用块时。我用一种自定义的方法来做。

+ (void) ensureDispatchOfBlock:(dispatch_block_t) block onQueue:(dispatch_queue_t) queue  async:(BOOL) async{
    if (queue == nil || 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];
}

这使我能够"确保"所提供的块的调度将在其预期的块上进行。

只需记住非常谨慎地使用async:NO即可。

相关内容

  • 没有找到相关文章

最新更新