Вы можете адаптировать код под ваш случай.Это в основном «разворачивает» цикл в несколько сообщений.Начните последовательность с [self doItForIndex:[NSNumber numberWithInt:0]];
- (BOOL)canDoitForIndex:(NSNumber *)i {
// return YES if you want to go ahead
// (e.g. test a BOOL you set in response to the user tapping a button
}
- (void)waitForIndex:(NSNumber *)i {
if ([self canDoItForIndex:i]) {
// do anything to clean up for i
// then repeat for i+1:
[self doItForIndex:[NSNumber numberWithInt:[i intValue]+1]];
} else {
[self performSelector:_cmd withObject:i afterDelay:0.01f;
}
}
- (void)doItForIndex:(NSNumber *)i {
if ([i intValue] < lastIndex) {
// do what you have to do
[self waitForIndex:i];
}
// else you're done
}
Концепция Apple NSRunLoop
предполагает, что вы завершите обработку довольно быстро.Если вы связываете основной поток, ожидая чего-то, в вашем приложении больше ничего не произойдет.Приведенный выше код разбивает «ожидание» на несколько отправок сообщений и поддерживает отзывчивость вашего приложения.