我正在开发一款应用程序,该应用程序具有事件计时器,该事件计时器可以持续很长时间的事件(duh!)。
我已经在相当长的时间内使用计时器完成了其他应用程序,之前从未遇到过这个问题。
基本上,正在发生的事情是,当应用启动时,我设置NSDate
值为[NSDate date]
。然后,我有一个定期激活的NSTimer
对象,并通过将当前[NSDate date]
值与原始值进行比较来检查已经过了多长时间。
据我所知,这是做这种事的正确方法,但如果我在上一段中有错误的假设,请纠正我。
无论如何,在过去几周内在我的新iPad上进行测试时,我已经多次(并随机)抓了几次,看起来我的系统时间有点跳跃。在一个例子中,时间似乎已经跳了64秒!这意味着我的计时器标签显示为' 03'然后立即显示' 01:08' (正确添加第二个,然后错误地添加64个)!!!在其他时候,它导致了一个负面的事件持续时间。
这是一个间歇性的事件,所以我基本上都在问这是否可能:
singleton
值。有没有人有类似的经历?有人可以帮忙吗?
答案 0 :(得分:2)
这不是iOS设备或操作系统版本错误。
无法保证NSDate API与您发现的一致,甚至是单调的。它漂移(取决于温度等),然后从蜂窝或NTP源进行校正,之后日期和时间值可以跳跃。
对于单调本地计时器,您可以尝试mach_time.h中的函数。为了获得更好的绝对时间参考,您的应用可以尝试轮询网络时间源。或者你可以将自己的时间函数与两者的某种组合联系起来。