2009-09-30 28 views
1

假設我有一個名爲Person的對象。 人內部加載了名爲「person.png」的UIImage。這是UIImage的高效使用嗎?

在我的應用程序中,我創建了許多Person對象,創建並在運行時刪除它們。

由於Person對象內部具有對UIImage的保留引用,這是否意味着每個Person都有唯一的映像內存分配?

或者是否所有Person對象都指向圖像的相同內存位置?

回答

2

那麼,這取決於你如何獲得UIImage。

您每次創建新的Person對象時都使用了+ [UIImage imageNamed:]嗎?如果是這樣,UIKit會緩存映像並將引用返回到內存中的單個副本。您保留它以確保它保持加載狀態,然後在完成引用時釋放它,但在內存中只創建一個UIImage對象。如果你正在調用+ [UIImage initWithData:]或[[UIImage alloc] initWithContentsOfFile:],你每次都在內存中創建一個新副本(並且你可能需要停止: )

+0

對,我絕對使用imageNamed。 – AlvinfromDiaspar 2009-09-30 17:25:59

+0

然後,你很好 - 只要記住保留/釋放適當。 如果您使用imageNamed加載大量圖像,請注意,在iPhone OS 2.0下,即使您完成這些緩存圖像,也不會卸載這些緩存圖像。有些人在加載大量圖像時耗盡內存,但據報道在iPhone OS 3中已修復此問題。 – 2009-10-04 18:14:46

1

如果您的Person實例使用retain作爲對UIImage實例的引用,那麼它將指向該內存中某個圖像的某個實例。

如果您使用copy而不是retain,您將擁有一個唯一的實例UIImage

請考慮參考memory management上的Apple參考資料。