具有自动内存管理的直观 Swift 定时器
Medium 文章:简化 Swift 定时器:彻底解决内存泄漏和复杂性问题
Timers 是一个轻量级的软件包,提供了一种方便的方式来处理和管理 Swift 中的定时器,尤其是在视图控制器中,可以自动管理定时器的生命周期。
import Timers
final class RefreshingViewController: UIViewController {
let timers = Timers()
func viewDidLoad() {
super.viewDidLoad()
timers.addRepeating(timeInterval: 1.0, withTarget: self) { (self) in
self.reloadData()
}
}
func reloadData() {
// reload your data here
}
}
Timers 会在视图控制器被销毁时自动使定时器失效,无需手动操作。
注意
帮助拯救乌克兰。 通过 United24 捐款,这是乌克兰总统的官方筹款平台
Foundation.Timer
API,用于更复杂的使用场景https://github.com/dreymonde/Timers.git
注意
Timers 是一个非常简单的库,仅包含一个文件 (Timers.swift)。不要期望更新,此版本可能为最终版本。如果您需要其他功能,请随意 fork 或将 Timers.swift 直接复制到您的项目中并进行扩展。欢迎提交 PR。
所有这些定时器都由
Timers
实例管理,并在Timers
实例被释放时自动失效。
import Timers
final class MyViewController: UIViewController {
let timers = Timers()
override func viewDidLoad() {
super.viewDidLoad()
timers.addRepeating(timeInterval: 1.0, withTarget: self) { (self, timer) in
self.reloadData()
}
}
func reloadData() {
// reload your data here
}
}
timers.addRepeating(timeInterval: 1.0, tolerance: 0.1, withTarget: self) { (self) in
self.reloadData()
}
在这种情况下,定时器将具有 0.1 秒的轻微容差,这允许系统调整定时器的触发时间,以获得更好的系统性能。
let date = Date().addingTimeInterval(5) // Date 5 seconds from now
timers.fireAt(date, withTarget: self) { (self) in
self.reloadData()
}
// or:
timers.fireAfter(timeInterval: 5, withTarget: self) { (self) in
self.reloadData()
}
timers.addRepeating(
initiallyFireAt: Date().addingTimeInterval(10),
thenRepeatWithInterval: 5.0,
withTarget: self
) { (self, timer) in
self.reloadData()
}
对于您想手动添加定时器的更自定义的使用场景
let customTimer = Timer(timeInterval: 1.0, repeats: true) { _ in
print("This is a custom timer")
}
timers.addTimerManually(timer: customTimer)
如果您想停止并使所有定时器失效,您可以调用
timers.clear()