我的UIButton的背景图片设置如下:
[myImageButton setBackgroundImage:[UIImage imageNamed:myImageName] forState:UIControlStateNormal];
myImageButton是类的保留属性,是用IB设置的。在应用程序中没有其他地方可以访问它。
myImageName只是一个带有@"myImage_number_1.png“文件名的NSString
我正在加载大图像,大小为1024 x 1024。当视图显示时,它使用上面的语句更改图像,然后可用内存减少。
在我看到大约7-9次不同的视图后,应用程序崩溃,并出现内存警告。
我认为这个方法会释放加载的图像。
视图本身只被实例化和分配一次,所以如果视图控制器,它不在保留/释放周期中。
是不是有什么我不知道的关于这个setBackgroundImage的东西导致它不能释放内存?
发布于 2010-05-06 14:00:39
啊,找到了。每次使用imageNamed加载图像时,它都会将图像缓存到内存中。我换成了imageWithContentsOfFile --它不缓存图片。
发布于 2017-10-17 05:57:52
对于未来的程序员来说,@just_another_coder的答案是正确的,但有一些事情你们都应该知道。
myImageName: UIImage将图像加载到一个特殊的系统缓存中,然后以后使用该图像路径的调用将返回缓存中的图像,而不是从磁盘重新加载。
UIImage imageWithContentsOfFilesimply在您指定的路径加载图像,但不缓存。对同一图像多次调用imageWithContentsOfFile将在内存中产生多个副本。
因此,你应该考虑你更喜欢哪一个,如果你使用带有内容的图片文件,你应该记住把那个按钮去掉,否则你将注定要成为一个不断增长的应用程序(内存使用明智)
https://stackoverflow.com/questions/2778674
复制相似问题