UIButton setBackgroundImage消耗不释放内存?

时间:2010-05-06 05:33:01

标签: iphone ipad

我的UIButton的背景图像设置如下:

[myImageButton setBackgroundImage:[UIImage imageNamed:myImageName] forState:UIControlStateNormal];

myImageButton是该类的保留属性,并使用IB进行设置。没有在应用程序中访问的其他地方。

myImageName只是一个NSString,文件名为@“myImage_number_1.png”

我正在加载1024 x 1024大小的大图像。显示视图时,它会使用上面的语句更改图像,然后可用内存减少。

在我看到有关7-9个不同时间的视图后,应用程序崩溃并显示内存警告。

我认为该方法会释放加载的图像。

视图本身仅被实例化并分配一次,因此如果视图控制器不在保留/释放周期中。

是否有关于此setBackgroundImage的内容我不知道是否导致它无法释放内存?

2 个答案:

答案 0 :(得分:4)

啊,发现了。每次使用imageNamed加载图像时,它都会将图像缓存在内存中。我切换到imageWithContentsOfFile - 它不缓存图像。

答案 1 :(得分:0)

对于未来的编码员来说,@ just_another_coder答案是正确的,但是你们都应该知道。

[UIImage imageNamed:myImageName]将图像加载到特殊的系统缓存中,然后使用该图像路径的未来调用将返回缓存中的图像,而不是从磁盘重新加载它。

[UIImage imageWithContentsOfFile]只是在您指定的路径上加载图像,但不进行缓存。对同一图像多次调用imageWithContentsOfFile将导致内存中有多个副本。

所以你应该考虑一下你宁愿选择哪一个,如果你使用imagewithcontentsoffile,你应该记得忽略那个按钮,否则你将注定一个不断增长的应用程序(明智地使用内存)