📅  最后修改于: 2023-12-03 15:36:39.259000             🧑  作者: Mango
在 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()
定时器默认在当前 RunLoop 的默认模式下运行。如果我们在主线程中处理一些繁重任务,定时器有可能会延迟触发。为了避免这种情况,我们建议将定时器添加到主线程的公共模式下。
如果我们在定时器触发的回调方法中访问了 UI,我们需要确保这些操作在主线程中执行。因为所有 UI 操作必须在主线程中执行。
如果我们在 UIViewController
等视图控制器中创建定时器,需要在视图控制器销毁前将其销毁。否则会出现内存泄漏。
定时器是 iOS 开发中非常有用的工具,在 Swift 中使用起来也非常简单。不过我们需要注意定时器的一些细节问题,以确保应用的性能和稳定性。
参考链接: