这个问题已经在这里有了答案:
检查当前线程是否为主线程 11个答案
我的代码需要保证在主线程上运行某些操作,但是调用可能来自后台线程。
为了检测背景情况,我使用了以下方法:
- (void)selectorToRunInMainThread:(id)arguments
{
// push to main thread
if ([NSRunLoop currentRunLoop] != [NSRunLoop mainRunLoop])
{
[self performSelectorOnMainThread:@selector(selectorToRunInMainThread:) withObject:arguments waitUntilDone:NO];
return;
}
/*
... function content ...
*/
}
这适用于iOS 4和iOS 3.2,但不适用于iOS 3.1.3和更早版本。 在这些早期版本中,该函数将不断循环调用。
将比较更改为:
if (![[NSRunLoop currentRunLoop] isEqualTo:[NSRunLoop mainRunLoop]])
没有任何效果,它们仍然永远无法与相同的值进行比较。
我发现了一个似乎可行的解决方案,但我想先看看别人的建议。