NSTimer准确度

时间:2012-08-06 19:56:22

标签: objective-c ios nstimer

我目前正在开发一款应用程序,该应用程序需要以确切的时间间隔播放声音文件,其持续时间可变。

我似乎记得被告知NSTimer只是在指定的持续时间之后将操作放到堆栈上,而不是在指定的持续时间之后运行。这意味着如果堆栈之前有很多其他操作,则不会按时调用。

我想知道这是否确实是正确的,如果是的话,是否有任何方法可以保证在指定的持续时间后运行。

在第一次发出声音文件可能会被延迟的评论之前,它们已经预先加载以避免这种情况。

1 个答案:

答案 0 :(得分:5)

first paragraph of Apple's NSTimer documentation中你会发现:

  

计时器不是实时机制;它只在其中一个发射时发射   已添加计时器的运行循环模式正在运行且能够运行   检查计时器的开火时间是否已经过去。因为各种各样   输入源一个典型的运行循环管理,有效的分辨率   计时器的时间间隔限制在50-100的量级   毫秒。如果在长时间标注期间发生计时器的发射时间或   当运行循环处于不监视计时器的模式时,   在下次运行循环检查计时器之前,计时器不会触发。   因此,计时器可能触发的实际时间可能是   在预定的开火时间后很长一段时间。

所以你肯定会在你的预定开火时间之后运行(或在你的情况下播放你的声音),但不一定 你的时间。