在 SwiftUI 中是否需要取消 Timer.publish 创建的计时器?

问题描述 投票:0回答:1

我继承了一个在

view
结构体中创建 SwiftUI 计时器的代码,如下所示。

struct CustomButton: View    {
    ...
    private let timer = Timer.publish(every: 1, on: .main, in: .common).autoconnect()
    ...

一旦实现预期触发并完成工作,就看不到任何取消计时器的代码。 但查看下面的指南,我发现建议使用

timer.upstream.connect().cancel()

取消计时器

我的问题是取消这个计时器有多重要,到目前为止我没有看到团队面临任何问题,但这是否会导致任何类型的问题?或者如果视图被释放,计时器也会被释放,所以这并不那么重要?

参考:https://www.hackingwithswift.com/books/ios-swiftui/triggering-events-repeatedly-using-a-timer

swift swiftui timer
1个回答
0
投票

let timer = Timer...
实际上对于 SwiftUI 来说并不是一个好的实践,你最终可能会出现内存泄漏,因为 SwiftUI 可以随时重新创建视图并创建多个计时器。

处理动画的“最佳”方法就是使用

TimelineView

TimelineView(.periodic(from: startDate, by: 1)) { context in
     AnalogTimerView(date: context.date)
}

https://developer.apple.com/documentation/swiftui/timelineview

但是如果你必须使用

Timer
,你应该将它与
onReceive
一起使用,这样它就会被适当地销毁。

 .onReceive(Timer.publish(every: 1, on: .main, in: .common).autoconnect()) { output in
    print("Timer called")
}
© www.soinside.com 2019 - 2024. All rights reserved.