Я бы предложил еще более простой способ застрять в потоках, используя следующий вызов:
[self performSelectorInBackground:(@selector(myMethod)) withObject:nil];
Это автоматически создаст новый фоновый поток для запуска. Кстати, убедитесь, что вы выполняете в фоновом методе следующее:
-(void) myMethod {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
// code you want to run in background thread;
[pool drain];
}
Это необходимо, поскольку пул автоматического выпуска по умолчанию не настроен ни для каких потоков, кроме основного.
Наконец, говоря о блокировке основного потока, вы можете использовать следующее из фонового потока:
[self performSelectorOnMainThread:(@selector(myOtherMethod)) withObject:nil waitUntilDone:YES];
Необязательный третий параметр будет поддерживать основной поток для вас, если вы этого хотите.
Надеюсь, это поможет!