4

我正在开发一个具有事件计时器的应用程序,该计时器可以对可以持续很长时间的事件(呃!)进行计时。

我已经在相当长的时间内使用计时器完成了其他应用程序,并且以前从未遇到过这个问题。

基本上,发生的事情是,当应用程序启动时,我NSDate[NSDate date]. 然后,我有一个定期触发的计划对象,并通过将当前值与原始值进行NSTimer比较来检查已经过去了多少时间。[NSDate date]

据我所知,这是做这类事情的正确方法,但如果我在上一段中有错误的假设,请纠正我。

无论如何,在过去几周在我的新 iPad 上进行测试时,我已经多次(并且随机地)发现我的系统时间似乎在跳跃。有一次,时间似乎跳了 64 秒!这意味着我的计时器标签显示“00:03”,然后立即显示“01:08”(正确添加一秒,然后错误添加 64)!!!在其他时候,它会导致负面的事件持续时间。

这是间歇性发生的,所以我基本上是在问这是否可能是:

  1. iOS 5.1 的一个错误
  2. 与特定于新 iPad 的硬件有关(在 iPad 1st Gen、2nd Gen、多个 iPhone/iPod Touch 版本等上从未出现过这个问题......)
  3. 错误代码(我承认这是可能的,但 NSDate 值不会变成 NSDate 值以外的值,我已经检查了项目中singleton设置此值的每个地方。

有没有人有过类似的经历?任何人都可以帮忙吗?

4

1 回答 1

3

这不是 iOS 设备或操作系统版本错误。

正如您所发现的,NSDate API 不能保证是一致的,甚至是单调的。它会漂移(取决于温度等),然后从蜂窝或 NTP 源得到纠正,之后日期和时间值可以跳跃。

对于单调的本地计时器,您可以尝试 mach_time.h 中的功能。为了获得更好的绝对时间参考,您的应用可以尝试轮询网络时间源。或者,您可以将自己的时间函数与两者的某种组合联系起来。

于 2012-05-03T19:21:42.593 回答