在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]
,如果没有,通过任何一种机制派发到主线程(你有什么好的)。