2013-03-06 109 views
8

我有一个图像[email protected]。该文件的大小为1KB。 我的应用程序是一个iPhone只应用程序。iOS:将使用[UIImage -imageNamed:]没有文件扩展名导致性能问题?

我在我的应用程序加载图像与此呼吁:

[UIImage imageNamed:@"image"]; 

当使用I/O活动的仪器分析的I/O活动,我发现有关于这个文件的几个活动,这导致“没有这样的文件或目录”错误,这些活动确实需要一些时间。

这些活动都喜欢阅读这些文件:

[email protected]~iphone.png 
[email protected]~iphone.png 
[email protected] (this one doesn't fail) 

让我吃惊,每次操作失败需要一个比成功更多的时间。

我该如何避免这种性能问题?

+0

有点相关 - http://stackoverflow.com/questions/7599030/uiimage-imagenamed-extension – Krishnabhadra 2013-03-06 03:42:55

+0

@CarmeloS。得到了“没有文件扩展导致性能问题?”的答案。 ? – 2013-11-28 15:22:48

+0

@Rajapandian查看所选答案:) – CarmeloS 2013-11-29 14:04:42

回答

5

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

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

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

我不建议不要使用imageNamed:来改善应用程序的性能。通常情况正好相反,使用该方法时,图像加载将更加优化(缓存)。但是,一旦确定某个特定映像不会再次加载并且防止过多查找文件系统,请使用imageWithContentsOfFile:。另外,当内存使用量是一个点时,实际上推荐使用imageWithContentsOfFile: - 没有缓存意味着较少的内存消耗。

+0

如果后者没有进行任何缓存或任何优化,那么Dwayne是否应该使用“'imageNamed'”就像他已经在做? – 2013-03-06 03:50:21

+0

哦,我不认为OP要避免扩展猜测,他想要的是避免性能问题。图像缓存也是对性能有正面影响的非常重要的功能。我不认为这回答了这个问题。 – Krishnabhadra 2013-03-06 03:51:10

+0

缓存只会提高缓存命中的性能。所以我认为OP将能够防止错失。 – Till 2013-03-06 03:52:33