首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >iOS是否阻止日期/时间更新?

iOS是否阻止日期/时间更新?
EN

Stack Overflow用户
提问于 2013-07-06 04:48:47
回答 2查看 163关注 0票数 2

这是一个相对简单的问题,我一直没有找到明确的答案。我的应用程序比较复杂,但回答这个问题就足够了。

假设您正在编写一个秒表应用程序。当用户点击“开始”时,应用程序将当前日期和时间存储在startTime中:

代码语言:javascript
复制
startTime = [NSDate date];

当用户点击“停止”时,应用程序会将当前日期和时间存储在stopTime中:

代码语言:javascript
复制
stopTime = [NSDate date];

持续时间的计算方法为:

代码语言:javascript
复制
duration = [stopTime timeIntervalSinceDate:startTime];

并以如下形式显示:

代码语言:javascript
复制
[durationLabel setText:[NSString stringWithFormat:@"%1.2f", duration]];

我的应用程序计时的典型持续时间从2秒到50秒不等。我需要精确到1/100秒(例如2.86秒)。

我假设iOS设备使用某种协议来保持其时钟的准确性(蜂窝或NTP源?)。我担心的是,在启动和停止秒表之间,iOS设备上的时钟会被更新,这可能会导致当前日期/时间提前或后退。如果发生这种情况,计算的持续时间将是不准确的。

我已经看到一些关于提高代码效率的计时方法的帖子。有些人建议使用mach_time.h函数,但我对此并不熟悉。对我来说,哪种方法是最好的方法并不明显。

是否可以禁止iOS更新日期和时间?mach_absolute_time()不受iOS时钟更新的影响吗?

非常感谢!

时间

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-07-06 06:06:43

您认为CFAbsoluteTime及其衍生产品(NSDate date等)可能会受到‘实时’网络更新的影响,这是正确的。此外,NSTimer的精确度为50-100ms,而且您的计时器不适合最关键的时间敏感操作。

这个问题的答案似乎是CACurrentMediaTime。它是Core Animation组的成员,但将其集成到基于非动画的应用程序中应该没有任何问题。

CACurrentMediaTime是mach_absolute_time()的包装器,它解释了"mach绝对时间单位“,据我所知,摆弄它并不是件有趣的事情。自上次启动设备以来,通过运行非网络同步计时器来计算mach_absolute_time()。

关于CACurrentMediaTime的信息相对较少,但这里有一些来源和进一步的阅读:

  • Apple's sparse documentation of CACurrentMediaTime
  • Stack溢出- NSTimer vs CACurrentMediaTime()
  • http://bendodsonapps.com/weblog/2013/01/29/ca-current-media-time/
  • http://blog.spacemanlabs.com/2011/09/all-in-the-timing-keeping-track-of-time-passed-on-ios/
  • http://forum.sparrow-framework.org/topic/accurate-timer

注意:如果使用CACurrentMediaTime,请确保包含并链接QuartzCore.framework

票数 1
EN

Stack Overflow用户

发布于 2013-07-06 05:03:01

查看this here。我会说忘记当前时间检查,使用精确的计时器,因为它不依赖于当前时间,而是使用时间间隔。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17496655

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档