ObjectiveC中imageNamed和imageWithContentsOfFile有什么区别?
ObjectiveC中imageNamed和imageWithContentsOfFile有什么区别?
imageNamed: imageNamed方法会缓存你的图片,但你失去了对内存的控制——释放对象并不一定能释放图片,但是这种方法可以提供更快的第二次加载图片速度,因为它们已经被缓存了。如果你使用Interface Builder,并在Image View Attributes中设置图片,那么也等同于imageNamed方法。当应用程序运行时,图片将立即被缓存。
imageWithContentsOfFile: imageWithContentsOfFile不会缓存图片,所以对内存更加友好,但是由于它不会缓存图片,所以加载速度会慢得多。imageWithContentsOfFile需要你输入完整的路径。我不明白为什么不推荐使用imageNamed方法,除了你无法访问应用程序包之外。
来自 这个 SO 链接
UIImage的方法imageNamed:和imageWithContentsOfFile:做了稍微不同的事情。imageNamed在一个特殊的系统缓存中加载图像,然后使用该图像路径进行的未来调用将从缓存中返回图像,而不是重新从磁盘加载它。imageWithContentsOfFile只是简单地加载您指定路径处的图像,但不进行缓存。对于相同的图像进行多次imageWithContentsOfFile调用将导致内存中出现多个副本。iOS似乎不会在发出内存警告时清空缓存(或根本不清空,我不确定),这可能导致应用程序由于缺少可用内存而终止。使用imageWithContentsOfFile加载的UIImages通过在需要时清除其图像并重新加载来响应内存警告,这可能解释了为什么您的内存峰值消失了。此外,模拟器中的缓存似乎比实际硬件中的缓存要大得多,我使用imageNamed遇到的问题和崩溃仅发生在设备上。在模拟器上进行测试时要小心!我唯一能想到使用imageNamed的原因是在您的视图中多次使用相同的图像。或者,您可以实现自己的图像缓存,并获得控制缓存的好处,如此处所述:http://www.alexcurylo.com/blog/2009/01/13/imagenamed-is-evil/也请查看this链接。
[UIImage imageNamed…]
和[UIImage imageWithData…]
的区别? - Matthias Bauch