在最简单的形式中,我的应用程序显示10个UIImageViews,每个都包含一个图像。即使所有UIImageView都包含图像,我的应用程序使用的内存足够小。但是,有一个按钮可以通过将所有图像设置为nil来清除所有UIImageViews。问题是,当检查仪器中的内存监视器时,UIImageViews保存的内存不会消失。这不会出现在Allocations工具中,确认剩余的内存占用不是对象,而是基于图形的内存。如果我将图像的大小调整为更小或更大的值,则剩余的内存也会分别更小或更大。
为什么在UIImageView的图像设置为nil后图像数据仍然存在?
答案 0 :(得分:1)
我相信UIKit会保留图像缓存以供重复使用。 UIImageView可能正在释放该对象,但出于性能原因会保留副本。
但是,这些图像应在收到内存警告时释放。如果他们不是,我会检查两个地方:
UIImage = [UIImage imageName:@"Foo.jpg"];
确保这些图像也被释放。您可以使用分配来查找UIImage类,但是更难以清除那些应该/不应该存在的类。答案 1 :(得分:-1)
在实际发布UIImageViews之前,它们的内存将保持分配状态。此外,如果您在UIImage上使用便捷方法来获取图像,例如:
UIImage *myImage = [UIImage imageNamed:@"myImage"];
请注意,您的图片可能会被iOS隐藏在幕后,因此即使您正在发布图像,内存占用仍可能反映内存中图像的存在(最终iOS会释放它,所以这不应该对您的资源消耗产生负面影响。)