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