我正在使用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是当前和以前的时间,经过的时间以纳秒为单位,相差一倍,换算为1秒=32768。当此技术失败时,记录的数据大约比预期的小100倍。缩放不是问题,我已经检查了t和pt的rawValue。我的假设是运行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

10-05 20:02