避免使用UIImage的imageNamed - 内存管理

时间:2011-08-26 06:52:21

标签: ios cocoa-touch memory-management uiimage

我正在经历this link,在那里我遇到了一个点避免UIImage的图像命名。为什么我们应该避免这个?

4 个答案:

答案 0 :(得分:7)

它会缓存图像而不释放它,直到它收到内存警告。我不确定,但我想如果你的应用程序有很多图像(大的),它可能会导致应用程序崩溃

对我来说,我通常使用“imageWithContentsOfFile”:

[UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:fileName ofType:nil]]

答案 1 :(得分:6)

在Apple WWDC视频部分,他们说imageNamed泄露了一次..但是不再这样做。我记得看过视频了,但是不记得哪个视频部分..它是在2010 WWDC中我认为..ImageNamed仍然缓存图像。从imageNamed的文档..

  

此方法在系统缓存中查找具有的图像对象   指定名称并返回该对象(如果存在)。如果匹配   图像对象尚未在缓存中,此方法加载图像   来自指定文件的数据,缓存它,然后返回   结果对象。

但我认为这些缓存会在任何低内存条件发生时被清除。只是为了你的信息..我是imageNamed的狂热粉丝,我总是使用它..我从来没有任何内存问题.. < / p>

答案 2 :(得分:2)

你应该阅读文章到最后。

  

避免使用UIImage的imageNamed:   Alex Curylo撰写了一篇关于UIImage的imageNamed:静态方法问题的绝佳文章。似乎(并且在我的测试中看来这是真的)iPhone OS(至少版本2.0和2.1)使用内部缓存来使用imageNamed:从磁盘加载的图像,并且在内存不足的情况下,此缓存不会被清除完全完全(这似乎在版本2.2中得到了纠正,但我无法确认)。

答案 3 :(得分:1)

它表示应该在SDK的2.0和2.1版本中避免使用它。它已经运作了很长时间。

看看这个question