dispatch_time和dispatch_walltime有什么区别,在什么情况下使用其中一个更好?

时间:2014-09-26 15:06:55

标签: objective-c swift

我知道dispatch_time是根据设备时钟的时间,如果设备进入休眠状态,时钟也会休眠。另一方面,dipatch_walltime是根据挂钟的时间,它永远不会进入睡眠状态。我的问题是,在不同的情况下使用其中一种或其他方面是否存在性能差异?有人可以给我一些更多细节,因为Apple文档并非详尽无遗。

例如,我正在写一个Timer类,它在某些时间间隔内运行。余地也可能是10至30秒。性能方面,我应该使用dispatch_timedispatch_walltime哪一个。

1 个答案:

答案 0 :(得分:30)

当您的计算机进入睡眠状态时,

dispatch_time停止运行。 dispatch_walltime继续运行,因为现实世界继续运行。

所以假设你想在1小时后做一个动作,但是5分钟后你的电脑就会睡50分钟。然后:

  • dispatch_walltime将在计时器唤醒后5分钟从现在开始执行一小时。

  • dispatch_time将在计算机运行一小时后执行,即从唤醒后的55分钟,从现在开始的1小时50分钟。