差异b / w imageNamed和imageWithContentsOfFile

时间:2013-07-10 11:36:59

标签: iphone ios objective-c uiimage

在ObjectiveC中有什么区别 imageNamed imageWithContentsOfFile

3 个答案:

答案 0 :(得分:17)

<强> imageNamed:              imageNamed cache是​​你的图像,你失去了对内存的控制 - 不能保证释放对象会实际释放图像,但在缓存时第二次提供更快的图像加载。如果您正在使用Interface Builder,并在“图像视图属性”中设置图像,那么它也等于imageNamed方法。应用程序运行时,图像将立即缓存

imageWithContentsOfFile:  imageWithContentsOfFile不缓存图像并且更加内存友好,但因为它不缓存图像并且加载速度要慢得多。 imageWithContentsOfFile:要求您输入完整路径。我不明白为什么imageNamed:不会被推荐,除了你无法访问应用程序包之外的文件。

答案 1 :(得分:3)

有一个很好的链接,解释了这两种方法的区别 image named-vs-image with contents of file

答案 2 :(得分:1)

来自this SO link

  

UIImage的方法imageNamed:和imageWithContentsOfFile:做一点点   不同的东西。 imageNamed在特殊系统中加载图像   缓存,然后使用该图像路径的未来调用将返回   缓存中的图像,而不是从磁盘重新加载它。   imageWithContentsOfFile只是将图像加载到您的路径上   指定,但没有缓存。多次通话   imageWithContentsOfFile对于同一图像将导致多个   在内存中复制。

     

iOS似乎没有清空缓存(好吧或根本没有,我不确定)   当发出内存警告时,可能会导致应用程序出现   因缺乏空闲记忆而终止。装载的UIImages   imageWithContentsOfFile通过清除它们来响应内存警告   图像并在需要时重新加载,这可以解释为什么你的   记忆飙升消失了。

     

此外,缓存似乎在模拟器中比在实际中要大得多   硬件,我用UIImages看到的问题和崩溃   imageNamed只发生在设备上。在测试时注意   模拟器!

     

我可以看到使用imageNamed相同图像的唯一原因   很多次你的意见。或者,您可以实现自己的   图像缓存,并获得可以使用缓存的好处   控制,如下所述:   http://www.alexcurylo.com/blog/2009/01/13/imagenamed-is-evil/

也可以查看this链接。