首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >iOS线程违规检测?

iOS线程违规检测?
EN

Stack Overflow用户
提问于 2012-08-24 02:36:32
回答 2查看 103关注 0票数 0

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

使用块,似乎很容易陷入一种情况,即一个人要么做出错误的假设,要么错误地知道哪个线程在做什么。可以检测何时从错误的线程发出调用的调试标志对于发现这些情况非常有用。

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

提交了错误报告,#12180446。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-08-24 02:45:32

在您的任何需要位于主线程上的API中使用以下代码:

代码语言:javascript
复制
NSAssert([NSThread isMainThread], @"This must only be called on the main thread.");

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

票数 2
EN

Stack Overflow用户

发布于 2012-08-24 02:55:51

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

代码语言:javascript
复制
+ (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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12098004

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档