我有一个名为 image@2x.png
的图像。文件大小为 1KB。
我的应用程序是一款仅限 iPhone 的应用程序。
我通过此调用将图像加载到我的应用中:
[UIImage imageNamed:@"image"];
在使用 I/O 事件工具分析 I/O 事件时,我发现有几个与此文件相关的事件导致“No such file or directory”错误,并且这些事件确实需要一些时间。
这些事件就像阅读这些文件:
image_2_only_@2x~iphone.png
image@2x~iphone.png
image@2x.png (this one doesn't fail)
令我惊讶的是,每一次失败的操作都比成功的操作花费更多的时间。
如何避免这种性能问题?
最佳答案
如果你想阻止广泛的文件系统访问,不要使用[UIImage imageNamed:]
,而是使用[UIImage imageWithContentsOfFile:]
。
后者不会对图像进行任何自动选择(扩展名猜测、视网膜猜测……),也不会使用内存缓存。
请确保您牢记,在使用我的建议时,对文件系统上图像的任何重复访问都将受到非常严厉的惩罚。
我不建议不要使用 imageNamed:
来提高应用程序的性能。通常情况恰恰相反,使用该方法时图像加载将更加优化(缓存)。但是,一旦确定不会再次加载特定图像并防止过多的文件系统查找,请使用 imageWithContentsOfFile:
。此外,实际上推荐使用 imageWithContentsOfFile:
当内存使用很重要时 - 没有缓存意味着更少占用内存。
关于iphone - iOS:使用没有文件扩展名的 [UIImage -imageNamed:] 会导致性能问题吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15238537/