What is the proper way to detect if code is running on the main thread in Objective-C? (iOS) [duplicate]
My code needs to guarantee a certain operation run on the main thread, but calls may come from background threads.
To detect situations开发者_Python百科 in the background I was using the following:
- (void)selectorToRunInMainThread:(id)arguments
{
// push to main thread
if ([NSRunLoop currentRunLoop] != [NSRunLoop mainRunLoop])
{
[self performSelectorOnMainThread:@selector(selectorToRunInMainThread:) withObject:arguments waitUntilDone:NO];
return;
}
/*
... function content ...
*/
}
This works on iOS 4 and iOS 3.2 but not on iOS 3.1.3 and earlier. In these earlier versions, the function will keep getting called in an endless loop.
Changing the comparison to:
if (![[NSRunLoop currentRunLoop] isEqualTo:[NSRunLoop mainRunLoop]])
has no effect, they still never compare to the same value.
I found a solution that appears to be working, but I'd like to see what other people suggest first.
[NSThread isMainThread]
and, if not, dispatch via any of a number of mechanisms to the main thread (what you have is fine).
精彩评论