下面的代码是重现我遇到的情况。 加载并清理数据后,内存仍然没有释放。
最奇怪的是,如果我按两次干净的数据,内存就会被释放。
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")!)
}
}
}
在
body
中,您应该只初始化结构体,而 UIImage
是一个类,因此您需要在某些操作中初始化它并保留它,然后将其提供给 Image
。
幸运的是,您可以通过使用不同的
Image
构造函数来避免这种情况:Image(name _:bundle:)