【问题标题】:Swift Timer lags快速计时器滞后
【发布时间】:2020-06-18 13:28:13
【问题描述】:

我知道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

在 Xcode 11.5、iMac 和 MacBook Pro 上测试。 我在这里做错了吗?

【问题讨论】:

    标签: swift macos timer nstimer


    【解决方案1】:

    没错,但您错过了Mac 应用程序的能源效率指南

    你的应用只是在打盹。

    检查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 电池寿命等都是不利的。

    【讨论】:

    • 感谢您的详细回答和链接。来自iOS,我不知道这一点。由于这个 macOS 应用程序是供内部使用的,所以只有我自己的 MacBook 的电池会受到影响;)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-27
    • 2016-01-28
    相关资源
    最近更新 更多