如何调试从主线程以外的线程获取Web锁?

时间:2013-03-14 10:25:37

标签: objective-c xcode4.5

void _WebThreadLockFromAnyThread(bool), 0x205acdf0: Obtaining the web lock from a thread other than the main thread or the web thread. UIKit should not be called from a secondary thread.

这看起来很严肃。我希望程序在那时打破。我不觉得我从主线程之外的任何地方访问UIKit。

然而,警告就在那里,我不知道我的代码在哪里发生

1 个答案:

答案 0 :(得分:2)

这意味着您的代码在某些时候从非主线程调用。问题是你不记得或不知道在哪里。你只是觉得你没有,但实际上你的代码确实如此。

我的建议是沉重的动态断言。在每个可疑的方法和功能上安装线程检查断言。例如,

- (void)test
{
   NSAssert([[NSThread currentThread] isMainThread], @"This code is expected to be called from main thread!");
}

然后断言最终会使您的应用程序在无效的线程上下文中崩溃。如果你没那么幸运,你可以按字面意思在每个方法上安装断言。

无论如何,一旦断言失败,你就可以从那里开始。如果你发现了坏点,下面的步骤就是微不足道的。