iphone - iOS:使用没有文件扩展名的 [UIImage -imageNamed:] 会导致性能问题吗?

标签 iphone ios performance uiimage

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

相关文章:

XIB 界面上的 IOS 按钮不起作用

ios - PFArrayResultBlock(parse) 在转换为 swift 2.0 时导致错误

java - 启动 Java 应用程序一次并 hibernate 更好,还是重复启动和终止更好?

iphone - 在 iphone 中用 “today” 和 “yesterday” 字符串替换日期对象

iphone - iPhone 5 的默认 568h@2x.png

iphone - 如何避免在 Core Graphics 中调用 png_read_filter_row 和 transform_premul_argb_fn?

java - 静态 Linkedhashmap 还是 Sharedpreference?

ios - TableViewCell 需要手动滚动更新

c++ - 在 XCode 中使用 C++ 代码

performance - 为什么 TeraSort 映射阶段在 CRC32.update() 函数中花费大量时间?