如果您创建以下视图的列表作为行:
struct ImageCellView: View {
let image: UIImage
init(image: UIImage) {
self.image = image
}
var body: some View {
return Image(uiImage: image).frame(height: 128).clipped()
}
}
Run Code Online (Sandbox Code Playgroud)
删除单元格后,UIImage 的内存不会释放,直到添加新单元格。查看内存图,我们可以发现 AGGraphStorage 持有对此的引用:
即使添加新单元格可以以某种方式释放内存,UIImage 偶尔也会泄漏:
这是 SwiftUI 中的错误吗?有什么办法可以摆脱这种行为吗?
这是 SwiftUI 中的错误吗?
不它不是。List缓存行以实现重用和性能目的。
有什么办法可以摆脱这种行为吗?
是的,
a) 不要保留UIImage在会员中
b)UIImage在其他地方进行管理并指示将其保持为weak var image: UIImage?
c)在行中处理这个.onDisappear
d) 忽略这一点,因为 List 缓存的行数不会超过屏幕上显示的行数,因此当该行用于其他图像时它将被重置
我更喜欢的是 a) 和 d),具体取决于用例。
| 归档时间: |
|
| 查看次数: |
1021 次 |
| 最近记录: |