在ObjectiveC中有什么区别 imageNamed 和 imageWithContentsOfFile
答案 0 :(得分:17)
<强> imageNamed:强> imageNamed cache是你的图像,你失去了对内存的控制 - 不能保证释放对象会实际释放图像,但在缓存时第二次提供更快的图像加载。如果您正在使用Interface Builder,并在“图像视图属性”中设置图像,那么它也等于imageNamed方法。应用程序运行时,图像将立即缓存
imageWithContentsOfFile: imageWithContentsOfFile不缓存图像并且更加内存友好,但因为它不缓存图像并且加载速度要慢得多。 imageWithContentsOfFile:要求您输入完整路径。我不明白为什么imageNamed:不会被推荐,除了你无法访问应用程序包之外的文件。
答案 1 :(得分:3)
有一个很好的链接,解释了这两种方法的区别 image named-vs-image with contents of file
答案 2 :(得分:1)
UIImage的方法imageNamed:和imageWithContentsOfFile:做一点点 不同的东西。 imageNamed在特殊系统中加载图像 缓存,然后使用该图像路径的未来调用将返回 缓存中的图像,而不是从磁盘重新加载它。 imageWithContentsOfFile只是将图像加载到您的路径上 指定,但没有缓存。多次通话 imageWithContentsOfFile对于同一图像将导致多个 在内存中复制。
iOS似乎没有清空缓存(好吧或根本没有,我不确定) 当发出内存警告时,可能会导致应用程序出现 因缺乏空闲记忆而终止。装载的UIImages imageWithContentsOfFile通过清除它们来响应内存警告 图像并在需要时重新加载,这可以解释为什么你的 记忆飙升消失了。
此外,缓存似乎在模拟器中比在实际中要大得多 硬件,我用UIImages看到的问题和崩溃 imageNamed只发生在设备上。在测试时注意 模拟器!
我可以看到使用imageNamed相同图像的唯一原因 很多次你的意见。或者,您可以实现自己的 图像缓存,并获得可以使用缓存的好处 控制,如下所述: http://www.alexcurylo.com/blog/2009/01/13/imagenamed-is-evil/
也可以查看this链接。