dispatch_afterを使うと指定時間経過後に処理を実行することができます。
- (void)foo
{
NSLog(@"begin %s", __func__);
// 5秒後にbarを実行する
dispatch_time_t time = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(5.0 * NSEC_PER_SEC));
dispatch_after(time, dispatch_get_main_queue(), ^(void) {
[self bar];
});
NSLog(@"end %s", __func__);
}
- (void)bar
{
NSLog(@"called %s", __func__);
}
performSelector:withObject:afterDelay:を使う方法もありますが、こちらの場合実行するメソッドの引数の数に制限があります。
- (void)foo
{
NSLog(@"begin %s", __func__);
// 5秒後にbarを実行する
[self performSelector:@selector(bar) withObject:nil afterDelay:5.0];
NSLog(@"end %s", __func__);
}
- (void)bar
{
NSLog(@"called %s", __func__);
}