簡體   English   中英

SwiftUI 不會為列表中已刪除的單元格釋放內存

[英]SwiftUI not Releasing Memory for Deleted Cells in List

如果您將以下視圖的列表創建為行:

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 中的錯誤嗎? 有什么辦法可以擺脫這種行為嗎?

這是 SwiftUI 中的錯誤嗎?

不它不是。 List緩存行用於重用和性能目的。

有什么辦法可以擺脫這種行為嗎?

是的,

a) 不要在成員中保留UIImage

b) 在其他地方管理UIImage並在結構中將其保持為weak var image: UIImage?

c) 在行的.onDisappear處理這個

d) 忽略這一點,因為 List 緩存的行數不會超過屏幕大小,因此當該行用於其他圖像時,它將被重置

我更喜歡 a) 和 d),具體取決於用例。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM