2013-03-06 112 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