我目前正在开发一款应用程序,该应用程序需要以确切的时间间隔播放声音文件,其持续时间可变。
我似乎记得被告知NSTimer只是在指定的持续时间之后将操作放到堆栈上,而不是在指定的持续时间之后运行。这意味着如果堆栈之前有很多其他操作,则不会按时调用。
我想知道这是否确实是正确的,如果是的话,是否有任何方法可以保证在指定的持续时间后运行。
在第一次发出声音文件可能会被延迟的评论之前,它们已经预先加载以避免这种情况。
答案 0 :(得分:5)
在first paragraph of Apple's NSTimer documentation中你会发现:
计时器不是实时机制;它只在其中一个发射时发射 已添加计时器的运行循环模式正在运行且能够运行 检查计时器的开火时间是否已经过去。因为各种各样 输入源一个典型的运行循环管理,有效的分辨率 计时器的时间间隔限制在50-100的量级 毫秒。如果在长时间标注期间发生计时器的发射时间或 当运行循环处于不监视计时器的模式时, 在下次运行循环检查计时器之前,计时器不会触发。 因此,计时器可能触发的实际时间可能是 在预定的开火时间后很长一段时间。
所以你肯定会在你的预定开火时间之后运行(或在你的情况下播放你的声音),但不一定 你的时间。