开发者

What is the proper way to detect if code is running on the main thread in Objective-C? (iOS) [duplicate]

This question already has answers here: Check whether or not the current thread is the main thread (13 answers) Closed 9 years ago.

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).

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜