ios - Swift 3.0 中不准确的 DispatchTime.now()

标签 ios swift timer

我正在使用 DispatchTime.now() 来测量事件之间耗时。有时它工作正常,但有时它生成的值远低于我的预期。

我目前的使用情况:

var t = DispatchTime.now()
var pt = DispatchTime.now()

// called when an event happens
t = DispatchTime.now()
var elapsed = Double(t.uptimeNanoseconds - pt.uptimeNanoseconds)
elapsed *= 32768/1000000000
pt = t

这样 t 和 pt 是当前时间和以前的时间,elapsed 以纳秒为单位取差值,转换为双倍,并缩放为 1 秒 = 32768。当此技术失败时,记录的数据比预期的小约 100 倍.缩放不是问题,我已经检查了 t 和 pt 的原始值。我的假设是运行 DispatchTime 的时钟运行速度较慢,可能是因为调试,但总的来说我认为 iOS 会补偿这样的事情。

最佳答案

正如@AlexanderMomchliov 所建议的那样,NSDate 是一种比 DispatchTime 更好的方法。

实现为:

var t: TimeInterval = 0
var pt: TimeInterval = NSDate().timeIntervalSinceReferenceDate

// called when an event happens
t = NSDate().timeIntervalSinceReferenceDate
var elapsed: Double = t - pt
elapsed *= 32768
pt = t

关于ios - Swift 3.0 中不准确的 DispatchTime.now(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41173525/

相关文章:

ios - 如何制作可点击的uiimage?

ios - 访问在界面生成器中创建的工具栏

ios - Firebase In-App Messaging 真的适用于 iOS 吗?

swift - 4个随机数总计100

php - 在 php 中长时间运行的全局计时器

php - 基于用户输入的计时器 PHP

ios - 按下/释放时更改 uiview 的颜色

ios - watchOS 2 上的钥匙串(keychain)访问不适用于实际 watch

ios - 循环的 Swift 4 完成处理程序不起作用

c# - 为什么值变量不改变?