gpt4 book ai didi

ios - 是否可以在后台运行全局计时器?

转载 作者:搜寻专家 更新时间:2023-11-01 05:45:53 24 4
gpt4 key购买 nike

对于我正在创建的应用程序,我希望有一个在后台运行的计时器,可以通过应用程序中的任何文件随时启动和停止。

我想知道这是否可行,以及如何着手实现。

我正在考虑使用一个全局变量(虽然我不确定这是否会在 View Controller 之间持续存在)或者可能对 NSNotifications 做些什么?

最佳答案

对于任何需要 Swift 3 版本的人:

class TimerModel: NSObject {
static let sharedTimer: TimerModel = {
let timer = TimerModel()
return timer
}()

var internalTimer: Timer?
var jobs = [() -> Void]()

func startTimer(withInterval interval: Double, andJob job: @escaping () -> Void) {
if internalTimer != nil {
internalTimer?.invalidate()
}
jobs.append(job)
internalTimer = Timer.scheduledTimer(timeInterval: interval, target: self, selector: #selector(doJob), userInfo: nil, repeats: true)
}

func pauseTimer() {
guard internalTimer != nil else {
print("No timer active, start the timer before you stop it.")
return
}
internalTimer?.invalidate()
}

func stopTimer() {
guard internalTimer != nil else {
print("No timer active, start the timer before you stop it.")
return
}
jobs = [()->()]()
internalTimer?.invalidate()
}

@objc func doJob() {
guard jobs.count > 0 else { return }
for job in jobs {
job()
}
}

}

我根据自己的需要做了一些改动。我添加了一个 jobs 数组,以便以后可以添加更多操作。我删除了那些 fatalError 调用。相反,当 startTimer() 被调用两次时,计时器只会重新启动,而当 stopTimer() 被调用并且没有计时器存在时,计时器什么都不做。

关于ios - 是否可以在后台运行全局计时器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36456476/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com