任何保证代码的方法总是在主线程上执行?

时间:2014-05-03 11:07:30

标签: ios multithreading cocoa grand-central-dispatch

对不起,如果这个问题听起来很愚蠢,但这超出了我对Objective-C的了解。

我正在开发一些必须始终在主线程上执行的类。

好的,我可以用一堆

来污染我的代码
  dispatch_async(dispatch_get_main_queue(),
                 ^{

                 });

但是我想知道我是否可以做些什么来防止这个类的方法在其他不是主线程的线程上运行,或者至少在调试,编译或其他什么时候发出警告在主线上。

感谢

2 个答案:

答案 0 :(得分:1)

我使用BLOCK_UI()中的https://github.com/gradha/ELHASO-iOS-snippets宏添加此类方法。在运行时,如果方法在主线程上运行,则宏将断言。宏在发布版本中消失了,因为我考虑在后台调用这样的API程序员错误,但是如果你想用程序员创建一个 permissive 的API,你也可以检查一下线程并在需要时在主线程中调用自己。例如:

if ([NSThread isMainThread]) {
    [self do_request:url];
} else {
    [self performSelectorOnMainThread:@selector(do_request:)
        withObject:url waitUntilDone:NO];
}

答案 1 :(得分:0)

您可以随时通过有用的API "[NSThread isMainThread]"

进行检查