NSTimer准确度

我目前正在开发一个应用程序,它需要以精确的间隔播放声音文件,这些文件的持续时间是可变的。

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

我想知道这是否确实是正确的,如果是这样,有没有办法让一个操作保证在指定的持续时间后运行。

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

在Apple的NSTimer文档的第一段中,您将找到:

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

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