Если «длинные инструкции по производительности» после кода предупреждения выполняются в главном потоке, они блокируют появление предупреждения. Прочитайте кое-что о циклах запуска Какао, это должно прояснить ситуацию. (По сути, можно сказать, что все инструкции пользовательского интерфейса в вашем методе не выполняются немедленно - они должны ждать завершения метода, а затем главный цикл выполнения выбирает их и выполняет.)
Код мог бы выглядеть так:
- (void) startSomeLongOperation {
[self createAndDisplayProgressSpinner];
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_NORMAL, 0), ^{
// …do something that takes long…
dispatch_async(dispatch_get_main_queue(), ^{
[self dismissProgressSpinner];
});
});
}
Это перемещает длинную операцию в фоновый режим, так что основной поток может продолжить выполнение немедленно.