Swift秒表的运行速度低于预期

时间:2018-03-12 19:49:25

标签: ios swift timer ios-simulator

我正在尝试在我的应用程序中实现秒表,但我注意到它实际上运行得比应该慢。这是代码:

timer = Timer.scheduledTimer(timeInterval: 0.01, target: self, selector: #selector(display), userInfo: nil, repeats: true)

func stringFromTimeInterval(interval: TimeInterval) -> NSString {
    let ti = Int(interval)
    let minutes = ti / 6000
    let seconds = ti / 100
    let ms = ti % 100
    return NSString(format: "%0.2d:%0.2d.%0.2d",minutes,seconds,ms)
}

@objc func display() {
    interval += 1
    lapInterval += 1
    timeLabel.text = stringFromTimeInterval(interval: TimeInterval(interval)) as String
    lapLabel.text = stringFromTimeInterval(interval: TimeInterval(lapInterval)) as String
}

希望我已经包含了足够的信息。提前谢谢!

1 个答案:

答案 0 :(得分:0)

不要试图运行一个每百分之一秒触发的计时器,然后计算它发射的次数。计时器不准确。它们的分辨率更像是50-100毫秒(0.05到0.1秒),并且由于计时器在主线程上触发,它取决于您经常为事件循环提供服务的代码。如果你遇到一段耗时的代码并且没有返回,那么计时器就不会被激活。

另外,iOS上的屏幕刷新是每1/60秒。由于您无法更快地显示更改,因此更频繁地运行计时器毫无意义。

每隔1/30运行一次计时器,并计算每次发射时的经过时间,如下所述:

要计算已用时间,请记录您想要开始计时的时间(Date()Date().timeIntervalSinceReferenceDate),然后每次要更新时,计算' new_date - old_date&# 39 ;.结果将是已经过的秒数,并且精确且精度为Double