实时使用NSTimer - Swift

时间:2014-10-30 06:48:20

标签: ios xcode swift

我正在试图弄清楚如何使用NSTimer,在我的情况下,我需要实时更新每一秒像时钟一样。我已阅读文档,但我不确定如何使用它。我在这里看到其他帖子谈论设置定时器而不是将定时器设置为实时并从那里实时计数。

问题:我该怎么做?

2 个答案:

答案 0 :(得分:3)

根据文档,NSTimer可能不准确,当系统足够空闲时它会触发。

如果真的依赖于确切的时间值,你可以做什么:创建一个计时器,让它每秒触发一次。在已触发的方法中询问确切的系统时间并使用它进行处理。这样,您始终可以获得与定时器事件的准确性无关的准确时间值。


一些示例代码:它存储计时器启动的系统时间。在update方法中计算自计时器启动以来的确切时间差。所以你得到准确的价值。

var timer: NSTimer?
var timerStart: NSDate?

func startTimer() {
    // get current system time
    self.timerStart = NSDate()

    // start the timer
    self.timer = NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: Selector("update:"), userInfo: nil, repeats: true)
}

func update() {
    // get the current system time
    let now = NSDate()

    // get the seconds since start
    let seconds = now.timeIntervalSinceDate(self.timerStart)

    ...
}

答案 1 :(得分:3)

dispatch_timers更准确,是每秒触发事件的更好方式。 NSTimer的准确度为50-100毫秒。这对于实时来说可能太多了(参见here)。