在Objective-C的主线程中检测代码是否正常运行的正确方法是什么? (iOS)

我的代码需要保证在主线程上运行某个操作,但是调用可能来自后台线程。

要在后台检测情况,我正在使用以下内容:

- (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]])

没有任何作用,他们仍然没有比较相同的价值。

我发现一个似乎正在工作的解决scheme,但我想看看其他人首先提出的build议。

[NSThread isMainThread] ,如果没有,通过任何一种机制派发到主线程(你有什么好的)。