gpt4 book ai didi

ios - SwiftUI 不释放列表中已删除单元格的内存

转载 作者:行者123 更新时间:2023-12-01 15:46:55 25 4
gpt4 key购买 nike

如果您将以下 View 的列表创建为行:

struct ImageCellView: View {
let image: UIImage

init(image: UIImage) {
self.image = image
}

var body: some View {
return Image(uiImage: image).frame(height: 128).clipped()
}
}

单元格被删除后,UIImage 的内存不会被释放,直到新的单元格被添加。查看内存图,我们可以发现 AGGraphStorage 正在为此保存引用:

即使添加新单元格可以以某种方式释放内存,UIImage 偶尔也会泄漏:

这是 SwiftUI 中的错误吗?有什么办法可以摆脱这种行为?

最佳答案

Is this a bug in SwiftUI?

不,不是。 List 缓存行以实现重用和性能目的。

Is there any way to get rid of this behavior?

是的,

a) 不要在成员中保留UIImage

b) 在其他地方管理 UIImage 并在结构中将其保存为 weak var image: UIImage?

c) 在行的 .onDisappear 中处理这个

d) 忽略这一点,因为 List 缓存的行数不超过屏幕大小,因此当该行用于其他图像时它将被重置

我更喜欢 a) 和 d),具体取决于用例。

关于ios - SwiftUI 不释放列表中已删除单元格的内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60841416/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com