如何延迟dispatch_after排队的块的执行?

时间:2014-09-11 04:55:06

标签: ios objective-c xcode ios7 grand-central-dispatch

假设我想稍后执行一段代码,所以我这样调用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){
    /* code */
});

但是如果我想在执行开始之前“暂停”我的程序怎么办?假设我希望在此次通话后1秒暂停程序,以获取未知时间。然后暂停后,我想恢复等待队列的2秒钟。所以它看起来像这样:

  • 以2秒的延迟致电dispatch_after
  • 1秒后,暂停程序未知时间
  • 恢复后,等待1秒钟并执行阻止(因此总延迟为2秒)

有没有办法做到这一点?或者我应该使用其他方法吗?

我知道dispatch_suspenddispatch_resume存在,但它们并不适合我(或者我只是不知道如何正确使用它们)。

解决方案不一定要涉及一个块,它也可能是对指定函数的延迟回调。关键是我希望能够暂停等待时间直到执行。

2 个答案:

答案 0 :(得分:1)

你无法做到这一点,但有一种方法可以做类似的事情。

延迟你的方法2秒:

[self performSelector:@selector(yourMethod) withObject:nil afterDelay:2.0];

1秒后,取消您的方法:

[NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(yourMethod) object:nil];

在一段未知的时间之后,回想一下您的方法并延迟一秒钟后执行它:

[self performSelector:@selector(yourMethod) withObject:nil afterDelay:1.0];

答案 1 :(得分:0)

将您的块放入方法

-(void)myMethod{
//implementation of the block
}

你要调用块但是在它之前延迟2秒,

致电

[self performSelector:@selector(myMethod) withObject:nil afterDelay:2.0];

希望这有帮助