我有一个名为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)
令我惊讶的是,每次失败的操作都需要比成功的操作更多的时间。
如何避免此类性能问题?
答案 0 :(得分:5)
如果您想阻止广泛的文件系统访问,请不要使用[UIImage imageNamed:]
,而是使用[UIImage imageWithContentsOfFile:]
。
后者不会对图像进行任何自动选择(扩展猜测,视网膜猜测......),也不会使用内存缓存。
请确保您记住,在使用我的建议时,文件系统上的图像上的任何重复访问都会受到非常严厉的惩罚。
我不建议不要使用imageNamed:
来提高应用程序的性能。通常情况恰恰相反,使用该方法时图像加载将更加优化(缓存)。但是,一旦确定不会再次加载特定图像并防止过多的文件系统查找,请使用imageWithContentsOfFile:
。此外,当内存使用率为点时,实际上建议使用imageWithContentsOfFile:
- 没有缓存意味着内存占用较少。