【发布时间】:2014-09-11 04:55:06
【问题描述】:
假设我想稍后执行一段代码,所以我像这样调用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_suspend 和dispatch_resume 存在,但它们并不真正适合我(或者我只是不知道如何正确使用它们)。
解决方案不一定要涉及块,也可以是对指定函数的延迟回调。关键是我希望能够暂停等待时间直到执行。
【问题讨论】:
-
我很确定这是不可能的。据我所知,一旦你发送了块,就无法更改它的发送时间。暂停队列也不会影响调度时间,它只会阻止该块在时间到时运行。
-
那么您能建议另一种方法吗?也许是对函数的延迟回调?那也不错。我实际上想在动画序列中使用它。首先我在屏幕上制作动画,然后在 2 秒后我想执行一些代码,这些代码也对它做一些事情。它适用于
dispatch_after,但如果您将应用程序发送到后台然后将其带回(在动画期间),时间就会搞砸。块内的代码立即执行,而不是等待 2 秒。
标签: ios objective-c xcode ios7 grand-central-dispatch