5 秒後に消えるサブビューを含む次の SwiftUI ビューがあります。フェードは、Combine TimePublisher の結果を受け取ることによってトリガーされますが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に比較的慣れていないので、ここで何かを台無しにしているか、正しく考えていないことを確認してください. このリークを回避する最善の方法は何ですか?
編集:リークを示すいくつかの写真を追加します。