我的UIButton的背景图像设置如下:
[myImageButton setBackgroundImage:[UIImage imageNamed:myImageName] forState:UIControlStateNormal];
myImageButton是该类的保留属性,并使用IB进行设置。没有在应用程序中访问的其他地方。
myImageName只是一个NSString,文件名为@“myImage_number_1.png”
我正在加载1024 x 1024大小的大图像。显示视图时,它会使用上面的语句更改图像,然后可用内存减少。
在我看到有关7-9个不同时间的视图后,应用程序崩溃并显示内存警告。
我认为该方法会释放加载的图像。
视图本身仅被实例化并分配一次,因此如果视图控制器不在保留/释放周期中。
是否有关于此setBackgroundImage的内容我不知道是否导致它无法释放内存?
答案 0 :(得分:4)
答案 1 :(得分:0)
对于未来的编码员来说,@ just_another_coder答案是正确的,但是你们都应该知道。
[UIImage imageNamed:myImageName]将图像加载到特殊的系统缓存中,然后使用该图像路径的未来调用将返回缓存中的图像,而不是从磁盘重新加载它。
[UIImage imageWithContentsOfFile]只是在您指定的路径上加载图像,但不进行缓存。对同一图像多次调用imageWithContentsOfFile将导致内存中有多个副本。
所以你应该考虑一下你宁愿选择哪一个,如果你使用imagewithcontentsoffile,你应该记得忽略那个按钮,否则你将注定一个不断增长的应用程序(明智地使用内存)