迅捷计时器延迟

我知道Timer不能保证完全按照您要求的速度运行。 但是,我刚刚开始了一个全新的项目:

class ViewController: NSViewController {

    var timer = Timer()
    var count: Double = 0.0
    var timeStamp: Date = Date()

override func viewDidLoad() {
    super.viewDidLoad()
    self.timer = Timer.scheduledTimer(timeInterval: 0.1,target: self,selector: #selector(self.updateCounting),userInfo: nil,repeats: true)
}

@objc func updateCounting(){
    let duration = self.timeStamp.distance(to: Date())
    print("Counting \(self.count) vs. Real life \(duration)")
    self.count = self.count + 0.1
}

}

我期望在countduration之间得到大致相同的结果,但是我看到类似这样的奇怪事情:

Counting 60.50000000000059 vs. Real life 60.64057409763336
Counting 60.60000000000059 vs. Real life 60.741435050964355
Counting 60.70000000000059 vs. Real life 70.84065008163452
Counting 60.800000000000594 vs. Real life 80.94094407558441
Counting 60.900000000000595 vs. Real life 82.99448704719543

在iMac和MacBook Pro的Xcode 11.5上进行了测试。 我在这里做错什么了吗?

iCMS 回答:迅捷计时器延迟

没错,但是您错过了 Mac Apps能源效率指南

您的应用只是在小睡。

检查ProcessInfo并搜索管理活动。一个例子(不好的例子)是将您的AppDelegate.swift更改为:

@NSApplicationMain
class AppDelegate: NSObject,NSApplicationDelegate {
    private var activity: NSObjectProtocol!

    func applicationDidFinishLaunching(_ aNotification: Notification) {
        let options: ProcessInfo.ActivityOptions = [.userInitiatedAllowingIdleSystemSleep]
        let reason = "No napping!"
        self.activity = ProcessInfo.processInfo.beginActivity(options: options,reason: reason)
    }

    func applicationWillTerminate(_ aNotification: Notification) {
        ProcessInfo.processInfo.endActivity(activity)
    }
}

但是不要这样做,这对用户,MacBook Pro的电池寿命等都是不利的。

本文链接:https://www.f2er.com/2105724.html

大家都在问