Swift 秒表 运行 比预期慢

Swift stopwatch running slower than expected

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

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
}

希望我提供了足够的信息。提前致谢!

不要尝试 运行 一个每百分之一秒触发一次的计时器,然后计算它触发的次数。计时器不准确。它们的分辨率更像是 50-100 毫秒(0.05 到 0.1 秒),并且由于计时器在主线程上触发,这取决于您的代码是否频繁地为事件循环提供服务。如果您进入 time-consuming 代码块并且没有 return,则计时器不会触发。

此外,iOS 上的屏幕刷新频率为每 1/60 秒。 运行更频繁地设置计时器没有意义,因为您将无法更快地显示更改。

运行 一个更像是每 1/30 秒的计时器,并按如下所述计算每次触发时经过的时间:

要计算经过的时间,记录要开始计时的时间(WithDate()Date().timeIntervalSinceReferenceDate),然后每次要更新时,计算'new_date - old_date'。结果将是已经过去的秒数,这将是准确的并且具有 Double 精度。