我有以下 SwiftUI 视图,其中包含一个在五秒后消失的子视图。淡入淡出是通过接收 Combine TimePublisher 的结果来触发的,但是更改发布者的 sink 块中的值会导致内存泄漏showRedView
。sink
import Combine
import SwiftUI
struct ContentView: View {
@State var showRedView = true
@State var subscriptions: Set<AnyCancellable> = []
var body: some View {
ZStack {
if showRedView {
Color.red
.transition(.opacity)
}
Text("Hello, world!")
.padding()
}
.onAppear {
fadeRedView()
}
}
func fadeRedView() {
Timer.publish(every: 5.0, on: .main, in: .default)
.autoconnect()
.prefix(1)
.sink { _ in
withAnimation {
showRedView = false
}
}
.store(in: &subscriptions)
}
}
AnyCancellable
我认为这是通过收藏在幕后以某种方式管理的。我对 SwiftUI 和 Combine 比较陌生,所以肯定我要么在这里搞砸了一些东西,要么没有正确地考虑它。避免这种泄漏的最佳方法是什么?
编辑:添加一些显示泄漏的图片。