2012-08-06 120 views
2

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

我似乎记得被告知的NSTimer只需在指定时间后放置的操作压入堆栈,而不是操作的指定时间段后中运行。这意味着如果在堆栈上有很多其他操作,则不会按时调用。

我想知道,如果这确实是正确的,如果是这样,有越来越来保证操作的指定时间段后运行的任何方式。

任何使评论的声音文件可能会延迟在第一时间之前,他们已经预装避免这种情况。

+2

有趣的讨论在http://stackoverflow.com/questions/4485072/accurate-timing-in-ios – CSmith 2012-08-06 20:02:06

+1

这可能有所帮助:http://stackoverflow.com/questions/3368169/accurate-music-grade-timing-音频播放 – Adam 2012-08-06 20:03:50

+0

@Adam辉煌的链接 - 这正是我在我的项目中所做的。 – 2012-08-06 20:05:02

回答

5

first paragraph of Apple's NSTimer documentation,你会发现这一点:

计时器不是实时的机制;只有在添加了定时器的 运行循环模式之一运行并且能够 检查定时器的触发时间是否已经过去时才会触发。因为一个典型的运行循环管理各种 输入源,的 用于定时器的时间间隔的有效分辨率被限制为50-100毫秒 的量级。如果长时间标注或 同时运行循环是在没有监控定时器模式期间发生计时器的发射时间时,计时器 不触发下一次运行循环检查计时器,直到。 因此,实际的时间在该计时器触发潜在可 调度烧成时间后的一个时间周期显著。

所以,你一定会运行(或播放你的声音,你的情况)您预定的发射时间后,但不一定正是你的时间。