📜  使用定时器 swift (1)

📅  最后修改于: 2023-12-03 15:36:39.259000             🧑  作者: Mango

使用定时器 Swift

在 iOS 开发中,经常需要使用定时器来完成一些任务,如周期性地更新 UI 或执行后台任务。在 Swift 中,我们可以使用 Timer 来创建定时器。

创建定时器

创建定时器非常简单,我们可以使用 Timer 的初始化方法来完成:

let timer = Timer.scheduledTimer(timeInterval: timeInterval, target: self, selector: #selector(timerAction), userInfo: nil, repeats: true)

其中,参数含义如下:

  • timeInterval:定时器触发间隔时间。
  • target:定时器触发后回调方法的所属对象。
  • selector:定时器触发后回调的方法。
  • userInfo:定时器触发后回调传递的数据。
  • repeats:是否重复触发定时器。

我们也可以使用 init(timeInterval: TimeInterval, repeats: Bool, block: @escaping (Timer) -> Void) 来创建,示例如下:

let timer = Timer(timeInterval: timeInterval, repeats: true) { timer in
    // do something
}
RunLoop.main.add(timer, forMode: .commonModes)
timer.fire()

注:add(_:forMode:) 方法需要针对 RunLoop 不同模式而相应调整。

销毁定时器

注意到,创建定时器的时候,我们设置了是否重复触发。同样,我们也可以在定时器触发后,将其销毁。示例如下:

timer.invalidate()
定时器的注意事项
  1. 定时器默认在当前 RunLoop 的默认模式下运行。如果我们在主线程中处理一些繁重任务,定时器有可能会延迟触发。为了避免这种情况,我们建议将定时器添加到主线程的公共模式下。

  2. 如果我们在定时器触发的回调方法中访问了 UI,我们需要确保这些操作在主线程中执行。因为所有 UI 操作必须在主线程中执行。

  3. 如果我们在 UIViewController 等视图控制器中创建定时器,需要在视图控制器销毁前将其销毁。否则会出现内存泄漏。

总结

定时器是 iOS 开发中非常有用的工具,在 Swift 中使用起来也非常简单。不过我们需要注意定时器的一些细节问题,以确保应用的性能和稳定性。

参考链接: