2011-11-25 66 views
1

我正試圖找到方法來減少我的應用程序的內存使用情況,並且我對UIImage有一個想法。我對UIImage進行了相當廣泛的使用,其中一些對於多個視圖很常見。實例化單個UIImage,然後在整個應用程序中使用指向同一圖像的指針,而不是爲每個視圖中的同一圖像分配新的UIImage有更高的內存效率嗎?或者,操作系統是否足夠智能地自動緩存UIImage,以便它只存儲在內存中一次? (懷疑是這樣,但我不得不問)切斷UIImage內存使用情況

謝謝。

回答

3

直爲imageNamed:

這種方法看起來在系統中的高速緩存,用於與 指定的名稱和該對象,如果它存在,則返回的圖像對象。如果匹配的 圖像對象尚未存在於緩存中,則此方法從指定文件加載圖像 數據,將其緩存,然後返回結果對象 。

+0

總是一個好主意,首先檢查文檔,但謝謝你的迴應,這肯定回答我的問題。 –

-1

是的,存儲單個UIImage並使用指針更有效。

操作系統不太可能以這種方式緩存圖像,即使這樣做,使用指針可以更好地控制圖像何時發佈/釋放,以便您不必指望操作系統正在運行照顧它。

+0

但是,如果你超過千UIImages副本的使用較少,你可能不必擔心太多有關記憶在這裏 - 這可能是更有益的簡單的代碼,並使用更多的副本,而不是創建非常複雜的代碼它只能節省幾百字節的RAM。 (特別是當涉及到調試道路時......) – Tim

+0

'imageNamed:'在第一次加載時緩存圖像,然後重新使用緩存圖像,隨後嘗試加載。 – ColdLogic

+0

哦,謝謝。我不知道這個! – Tim

1

您使用了很多圖片,所以請記住[UIImage imageNamed:@""];緩存圖片,所以如果您的內存不足,請使用[UIImage imageWithContentsOfFile:@""];而不緩存它。也許這可以幫助你減少內存使用量。

+0

這不會降低他的記憶問題。事實上,它會增加它,因爲他反覆使用相同的圖像。每次重複使用時不斷向記憶中添加新圖像將是他想避免的確切事情。 – ColdLogic