Мой код должен гарантировать, что определенная операция выполняется в основном потоке, но вызовы могут возникать из фоновых потоков.Каков правильный способ определить, работает ли код в основном потоке в 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 ...
*/
}
Это работает на прошивке 4 и прошивке 3.2, но не на прошивке 3.1.3 и более ранние версий. В этих более ранних версиях функция будет продолжать вызываться в бесконечном цикле.
Изменение сравнения с:
if (![[NSRunLoop currentRunLoop] isEqualTo:[NSRunLoop mainRunLoop]])
не имеет никакого эффекта, они до сих пор не сравнить с тем же значением.
Я нашел решение, которое работает, но я хотел бы посмотреть, что предлагают другие люди.
Это намного более чистый, чем то, что у меня было: if ([[NSRunLoop currentRunLoop] getCFRunLoop]! = [[NSRunLoop mainRunLoop] getCFRunLoop]) –