NSTimer是否受到处理器速度、不同代iPhone等因素的影响

NSTimer是否受到处理器速度、不同代iPhone等因素的影响,iphone,objective-c,ipad,nstimer,Iphone,Objective C,Ipad,Nstimer,我正在我的游戏中实现一种倒计时方法,它将使用15秒的倒计时。我一直在寻找不同的方法来实现这一点,并相信NSTimer是一条出路 然而,有人告诉我,这可能会受到处理器速度等因素的影响。我的问题是,如果这是真的,如果是真的,我该如何应对 我已经看到了这一点:但我并不完全理解这一点的影响 有没有其他方法可以保证15秒的停机时间和所有设备?我不明白你的最后一句话 然而,我相信你的朋友们是对的,与实际倒数秒数相比,它稍微有点偏离,但我向你保证,差异是如此之小,以至于不明显,特别是对于游戏而言 产生差异的原

我正在我的游戏中实现一种倒计时方法,它将使用15秒的倒计时。我一直在寻找不同的方法来实现这一点,并相信NSTimer是一条出路

然而,有人告诉我,这可能会受到处理器速度等因素的影响。我的问题是,如果这是真的,如果是真的,我该如何应对

我已经看到了这一点:但我并不完全理解这一点的影响


有没有其他方法可以保证15秒的停机时间和所有设备?

我不明白你的最后一句话

然而,我相信你的朋友们是对的,与实际倒数秒数相比,它稍微有点偏离,但我向你保证,差异是如此之小,以至于不明显,特别是对于游戏而言

产生差异的原因是,您将NSTimer设置为在1秒内执行,当它执行时,会更新屏幕上的倒计时,然后重复。我的猜测是,NSTimer直到执行完您的方法后才开始重复,因此每一秒的NSTimer都比实际秒长一纳秒

苹果可能比我领先一步,在执行之前调用repeat,但我不确定


不管怎样,就像我说的,除非你在做一些重要的事情,而不仅仅是每秒更新屏幕,否则你的用户不应该注意到任何差异。

NSTimer在大多数情况下都是可以的。它不会是精确的-周期会比你设定的稍长,但在良好的条件下只有很小的量-想想毫秒。但是,NSTimer是通过runloop触发的,因此其准确性取决于runloop是否繁忙。您可以通过在自己的线程上有一个专用的runloop来最小化问题,不过如果系统繁忙,您仍然会看到计时器的周期略微延长

因此,虽然CPU速度和其他类似因素之间没有内在的联系,但更快的硬件将能够更好地跟上,因为它们不会经常忙碌

还要注意的是,重复的NSTimer不会发生相移,它将精确地设置为1s的间隔,就像设置为15s一样。唯一需要注意的是,如果下一次火灾发生时处理程序仍在运行,那么火灾根本不会发生。e、 g.如果你花1.1秒,两次点火之间的间隔将跳到2秒


runloops&NSTimers的另一种替代方法是在之后调度。不过,它不太可能更准确,它的滑动仍然取决于目标队列(可能是默认并发队列之一)在启动时不忙。

理论:处理器速度不会直接影响
NSTimer
。在第2代设备上运行1分钟的计时器在更新的设备上也应代表1分钟

这就是理论:),但事实上,处理器速度不仅影响计时器,还影响应用程序的总体速度(例如,视图的变化速度、按下按钮后音乐的启动速度等)。唯一(或最好的测试)是在您将要针对的设备类型上重复测试您的应用程序。尽早测试,经常测试:)


你不能(根据我的经验)保证在任何设备上都有准确的时间
T
。但是,您可以获得与预期时间接近的平均时间
T

您是否查看过CADisplayLink类,它是一种更高效的计时器。CADisplayLink不适合测量挂钟时间,因为它基于显示器的刷新率。这可能是“大约60Hz”,但并不精确,事实上大多数LCD都有点偏离任何整数-例如59.97Hz。