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

Car*_*loS 8 iphone performance uiimage ios

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

我通过此调用在我的应用中加载图像:

[UIImage imageNamed:@"image"];
Run Code Online (Sandbox Code Playgroud)

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

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

image_2_only_@2x~iphone.png
image@2x~iphone.png
image@2x.png (this one doesn't fail)
Run Code Online (Sandbox Code Playgroud)

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

如何避免这种性能问题?

Til*_*ill 5

如果要阻止大量文件系统访问,请不要使用[UIImage imageNamed:]but [UIImage imageWithContentsOfFile:].

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

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

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