我创建了一个带有2个viewcontroller嵌入导航控制器的应用程序。第一个视图控制器只包含一个按钮(触发第二个视图控制器)和第二个视图控制器只包含一个带有一个高分辨率图像(300MB)的UIImageView。当它显示第二视图控制器时,内存占用大约300 MB并且我返回到第一视图控制器(popviewcontroller),内存使用量仍然消耗300MB。经过一些研究后,我猜想加载的图像仍然存储在缓存中并且不会被释放。所以我的问题是如何手动释放图像,以便内存使用率下降?
EDITED 大家好,回答我自己的问题。使用" autoreleasepool"会做的。
答案 0 :(得分:1)
请你试试这种方式。如果图像的大小太大,请不要将其放在图像xcassets文件夹中。将它放在项目导航器中并将其用作路径。
if let path = Bundle.main.path(forResource: image name in string, ofType: image format like "png" or "jpg"){
if let image = UIImage(contentsOfFile: path){
imageView.image = image
}else{
print(" No image found")
}
}else{
print("No image path found")
}
如果图像的大小很大,请不要这样使用
imageView.image = UIImage(named: image name)
根据苹果文档App doc。它没有释放使用记忆。它会缓存图像以供将来使用。使用 imageWithContentsOfFile: 要么 的init(contentsOfFile :) 创建图像对象的方法,其中初始数据不在包中。这些方法每次都会从磁盘加载图像数据,因此不应使用它们重复加载相同的图像。 如果您想了解详细信息here就是答案。