Подтвердить что ты не робот

Каким образом можно определить, работает ли код в главном потоке в 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]])

не имеет никакого эффекта, они все равно никогда не сравниваются с тем же значением.

Я нашел решение, которое, кажется, работает, но я хотел бы посмотреть, что предлагают другие люди.

4b9b3361

Ответ 1

[NSThread isMainThread] и, если нет, отправьте через какой-либо из нескольких механизмов в основной поток (что у вас в порядке).