iphone - 从应用程序包加载图像的最佳方式

标签 iphone objective-c performance image nsbundle

从应用程序主包加载图像的最佳方式是什么。我正在使用

[UIImage imageNamed: "image.png"];

但我听说这在内存使用和性能方面不太好。任何人都可以就此给出他/她的反馈吗?我的应用程序在启动时从主包中读取大量图像。我想让这个过程尽可能高效。

最好的问候

最佳答案

如果存在一种真正的“最佳方式”,那么以多种方式加载图像的方法就不会存在(除非出于历史原因)。因此,与将答案提炼为“最佳方式”相比,稍微了解一下会更好。

+[UIImage imageNamed:] 缓存图像以供重用,对于大多数用途来说这是一个合理的默认值。如果使用得当,缓存非常好。缓存很好,因为它可以通过共享和重用加载的图像来最大程度地减少磁盘读取和内存使用,而不是为必须显示的每个图像读取和分配副本。考虑您在多个屏幕上使用的图标图像 - 您是否希望每次都读取和重新分配该图像数据?这可能会导致重复读取和分配相同的图像数据。如果没有,请使用缓存方法。

如果您只延迟加载一次图像,那么您可能需要考虑非缓存方法。

  • 图像数据会消耗大量内存。
  • 读取图像可能需要很长时间——不仅仅是磁盘输入/输出,还要将其转换为可用的 UIImage 表示形式(例如,解压缩图像)。
  • 有时您应该调整图像的大小/缩放比例。那么你会想要一个缩放的副本。

简而言之,有很多考虑因素,但如果您有适当缩放的 Assets 可以重复使用,缓存通常是正确的选择。

如果您的 Assets 大小不正确,那么问题就更根本了——如果您遇到性能问题,您应该调整捆绑 Assets 的大小以适合您的目的。适当大小的图像还可以显着简化绘图,同时保持最佳图像质量。

关于iphone - 从应用程序包加载图像的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9171793/

相关文章:

sql - SQL Server 2005 中的 UNION ALL 性能

android - 合并 v4 库后静态变量变为空

ios - 委托(delegate)按钮单击在 tableview 单元格中不起作用

ios - 如何检测 iOS 8 中按下的键盘 "PAGE UP"键?

c# - 与序列化相比,使用 MarshalByRefObject 的开销有多大?

iphone - 无法从 ios 5 在 sqlite 中插入数据

objective-c - 覆盖父类(super class)的指定初始化程序

ios - 在不同设备上正确的图像和字体比例?

iphone - 卡在画外音

iphone - Xcode : Storyboarding with CoreData