Мой код должен гарантировать, что определенная операция выполняется в основном потоке, но вызовы могут возникать из фоновых потоков.
Чтобы обнаружить ситуации в фоновом режиме, я использовал следующее:
- (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]])
не имеет никакого эффекта, они все равно никогда не сравниваются с тем же значением.
Я нашел решение, которое, кажется, работает, но я хотел бы посмотреть, что предлагают другие люди.