iOS:将使用[UIImage -imageNamed:]而没有文件扩展名导致性能问题?

时间:2013-03-06 03:38:57

标签: iphone ios performance uiimage

我有一个名为image@2x.png的图像。文件大小为1KB。 我的应用程序是仅限iPhone的应用程序。

我使用此调用在我的应用中加载图片:

[UIImage imageNamed:@"image"];

当使用分析I / O活动的I / O活动工具时,我发现有几个与此文件相关的活动导致“没有这样的文件或目录”错误,这些活动确实需要一些时间。

这些活动就像阅读这些文件一样:

image_2_only_@2x~iphone.png
image@2x~iphone.png
image@2x.png (this one doesn't fail)

令我惊讶的是,每次失败的操作都需要比成功的操作更多的时间。

如何避免此类性能问题?

1 个答案:

答案 0 :(得分:5)

如果您想阻止广泛的文件系统访问,请不要使用[UIImage imageNamed:],而是使用[UIImage imageWithContentsOfFile:]

后者不会对图像进行任何自动选择(扩展猜测,视网膜猜测......),也不会使用内存缓存。

请确保您记住,在使用我的建议时,文件系统上的图像上的任何重复访问都会受到非常严厉的惩罚。

我不建议不要使用imageNamed:来提高应用程序的性能。通常情况恰恰相反,使用该方法时图像加载将更加优化(缓存)。但是,一旦确定不会再次加载特定图像并防止过多的文件系统查找,请使用imageWithContentsOfFile:。此外,当内存使用率为点时,实际上建议使用imageWithContentsOfFile: - 没有缓存意味着内存占用较少。