小编BJH*_*ios的帖子

如何避免 SwiftUI + 组合计时器发布器引用循环/内存泄漏?

我有以下 SwiftUI 视图,其中包含一个子视图,该子视图在五秒后消失。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)
    }
}
Run Code Online (Sandbox Code Playgroud)

我认为这是通过该系列在幕后以某种方式进行管理的AnyCancellable。我对 SwiftUI 和 Combine …

ios swiftui combine xcode12

4
推荐指数
1
解决办法
1468
查看次数

标签 统计

combine ×1

ios ×1

swiftui ×1

xcode12 ×1