gpt4 book ai didi

swift - 如何在 Swift 4 中管理预定事件?

转载 作者:行者123 更新时间:2023-12-04 13:46:03 25 4
gpt4 key购买 nike

寻找有关如何在 swift 4(外部库或 Apple 支持)中最好地管理预定事件的方向。

我希望能够将任务(带有计时器)放入某种集线器中,一旦计时器耗尽,该集线器将执行任务,然后在任务结束时执行任务的完成块。

我可以用 NSNotification 做到这一点吗?

任何人都知道一个很好的示例应用程序(例如 GitHub),我可以下载并使用它来学习如何安排任务。

更多详情

我正在创建这样的计时器

  timer_iosActionsRefresh = Timer(fireAt: date, interval: timeInterval, target: self, selector: #selector(refreshIosActions), userInfo: nil, repeats: true)
RunLoop.main.add( timer_iosActionsRefresh!, forMode: RunLoopMode.commonModes)

然后我这样做是为了停止计时器
  if timer_iosActionsRefresh != nil {
timer_iosActionsRefresh?.invalidate()
timer_iosActionsRefresh = nil
}

这在应用程序前台模式下效果很好,但在后台模式下不起作用,因为 Apple 仅支持后台模式事件的特殊状态(例如 CLLocationManager didEnterRegion)

1) 是否可以创建类似 Timer 之类的东西,但仍会在后台模式下执行?不想做繁重或连续的工作,只是小的后台查询。

2) 即使有一些方法可以解决 Timer 在后台模式下不工作的问题,该代码能否通过 Apple 应用程序审查?

最佳答案

我会推荐使用 GCD(Grand Central Dispatch),这很容易:

let queue = DispatchQueue.global(qos: .background) // or some higher QOS level

// Do somthing after 10.5 seconds
queue.asyncAfter(deadline: .now() + 10.5) {
// your task code here
DispatchQueue.main.async {
// maybe update UI here after task has finished
}
}

如果您不需要后台队列并且只想在主线程中执行任务,只需执行以下操作:
DispatchQueue.main.asyncAfter(deadline: .now() + 10.5) {
// task etc.
}

如果您希望能够取消您安排的任务,您应该查看 NSOperation (它基于 GCD 并允许取消和其他更高级别的东西)。

关于swift - 如何在 Swift 4 中管理预定事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48222167/

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