8

我有一个名为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)

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

我怎样才能避免这种性能问题?

4

1 回答 1

5

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

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

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

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

于 2013-03-06T03:47:28.513 回答