首页 > 解决方案 > SwiftUI 的 List 泄露内存

问题描述

我在玩 SwiftUI 时注意到一个问题List,当我构建我的行视图时,我创建了一个视图模型,如下所示:

struct MyListView: View {
    var body: some View {
        NavigationView {
            List(models) { model in
                RowView(viewModel: RowViewModel(model: models))
            }
            .navigationTitle("Landmarks")
    }
}

列表有多大并不重要,我的视图模型永远不会被释放,我不确定视图实际上被回收到了哪个扩展,但是我可以通过使用 Xcode 上的内存调试器看到,当我滚动和更多视图时构建,越来越多的视图模型被分配并保存在内存中,这就是我的行视图的样子:


struct RowView: View {
    var viewModel: RowViewModel

    var body: some View {
        HStack {
            Text(viewModel.title)

            Spacer()
        }
    }
}

和我的视图模型:

class RowViewModel {
    private let model: Model
    
    init(model: model) {
        self.model = model
    }
    
    var title: String {
        model.title
    }
}

我在使用前也尝试过,@ObservedObject但这并没有什么不同。

标签: memory-managementswiftui

解决方案


推荐阅读