斯威夫特& macOS:当app在后台运行时,定时器可以使用延迟

时间:2016-10-12 15:24:16

标签: swift macos timer swift3 macos-sierra

我有一个macOS应用程序,它有计时器,每秒增加数量。每隔60秒,我就会显示一条消息通知。

我发现我的macOS Swift应用程序运行有一些延迟,并且在大约10分钟后开始睡眠(没有新的a;让我们再出现)。

我找到了一些解决方案,例如:

private func startTimer() {
    timer = Timer.scheduledTimer(
        timeInterval: 1.0,
        target: self,
        selector: #selector(timerTick),
        userInfo: nil,
        repeats: true
    )
    RunLoop.main.add(timer, forMode: RunLoopMode.commonModes)
}

但是这个命令并没有帮助我通过计时器的后台运行修复延迟:     RunLoop.main.add(timer,forMode:RunLoopMode.commonModes)

需要一些经验丰富的Swift人帮助我解决这个有趣的挑战。我需要在后台应用中正确计算秒数,因为我的应用每隔几分钟会显示一次警报消息,如果它无法正确显示这些警报 - 我的应用程序将无法正常工作。

谢谢!

1 个答案:

答案 0 :(得分:0)

我敢打赌你正在遇到App Nap。您可以通过NSProcessInfo告诉系统您的流程不应该通过App Nap进行控制。

您也可以尝试禁用App Nap defaults write <app domain name> NSAppSleepDisabled -bool YES ...但不确定它是否仍然有效(App Nap是在OS X 10.9中引入的,因此三年时间可能会禁用禁用功能...)