UIImage不释放内存

问题描述 投票:0回答:1

下面的代码是重现我遇到的情况。 加载并清理数据后,内存仍然没有释放。

最奇怪的是,如果我按两次干净的数据,内存就会被释放。

UIImage
如何工作?

我尝试使用

UIImage(contentsOf:)
UIImage(data:)
,他们给了我相同的结果。

import SwiftUI
import Foundation
struct MainView:View {
    @State var data:[Data] = []
    @State var urls:[URL] = []
    var body: some View {
        VStack{
            Button("clean data"){
                data.removeAll()
                urls.removeAll()
            }
            Button("load data"){
                loadData()
            }
            HStack{
                ForEach(urls, id: \.self) { url in
                    Image(uiImage: UIImage(contentsOfFile: url.path)!)
                        .resizable()
                        .scaledToFit()
                }
            }
        }
    }
        func loadData(){
            for i in 0...5{
                urls.append(Bundle.main.url(forResource: "output\(Int.random(in: 0...2))", withExtension: "png")!)
            }
        }
    
}

ios swiftui uiimage automatic-ref-counting
1个回答
0
投票

body
中,您应该只初始化结构体,而
UIImage
是一个类,因此您需要在某些操作中初始化它并保留它,然后将其提供给
Image

幸运的是,您可以通过使用不同的

Image
构造函数来避免这种情况:
Image(name _:bundle:)

© www.soinside.com 2019 - 2024. All rights reserved.