Цей рядок викликає селектор secondMethod через 3 секунди:
[self performSelector:@selector(secondMethod) withObject:nil afterDelay:3.0 ];
Використовуйте його під час другої операції з бажаною затримкою. Якщо у вас багато коду, помістіть його у свій власний метод і викличте цей метод за допомогою performSelector:
. Це не буде блокувати інтерфейс, якsleep
Змінити: Якщо ви не хочете другого методу, ви можете додати категорію, щоб мати можливість використовувати блоки з performSelector:
@implementation NSObject (PerformBlockAfterDelay)
- (void)performBlock:(void (^)(void))block
afterDelay:(NSTimeInterval)delay
{
block = [block copy];
[self performSelector:@selector(fireBlockAfterDelay:)
withObject:block
afterDelay:delay];
}
- (void)fireBlockAfterDelay:(void (^)(void))block
{
block();
}
@end
Або, можливо, навіть чистіше:
void RunBlockAfterDelay(NSTimeInterval delay, void (^block)(void))
{
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, NSEC_PER_SEC*delay),
dispatch_get_current_queue(), block);
}