我有一个方法需要几个参数,我需要延迟该方法的一部分。我不想将它分成几个方法并使用[self performSelectorAfterDelay]
因为延迟需要在该方法中已经使用了params。我需要类似下面的内容
-(void)someMethod{
.....
delay {
more code but not a separate self method
}
... finish method
}
答案 0 :(得分:3)
dispatch_after
功能似乎符合您的需求:
double delayInSeconds = 2.0;
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC);
dispatch_after(popTime, dispatch_get_main_queue(), ^(void) {
// this code is going to be executed, on the main queue (or thread) after 2.0 seconds.
});
当然,时间是可配置的,一开始读起来有点令人困惑,但是一旦你习惯了块与objective-c代码一起工作的方式,你应该好好去。
提醒一句:
从不,绝对不要!使用sleep()
阻止iPhone应用程序的主线程。只是不要这样做!
答案 1 :(得分:1)
看起来有点矫枉过正。
-(void)someMethod{
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{
NSLog(@"Start code");
dispatch_queue_t backgroundQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0);
dispatch_sync(backgroundQueue, ^{
sleep(5);
// delayed code
NSLog(@"Delayed code");
});
dispatch_sync(backgroundQueue, ^{
// finishing code
NSLog(@"Finishing code");
});
});
}
backgroundQueue
可能是外部调度电话的用户。看起来真的很糟糕:))