我的代码需要保证在主线程上运行某个操作,但调用可能来自后台线程。
为了检测后台的情况,我使用了以下内容:
- (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]])
没有效果,它们仍然永远不会与相同的值相比。
我找到了一个似乎有效的解决方案,但我想先看看其他人的建议。
答案 0 :(得分:94)
[NSThread isMainThread]
如果没有,可以通过任何一种机制发送到主线程(你有什么不错)。