2009-09-28 63 views
0

UIImage是否曾經從緩存中刪除圖像?我可以保留一個指向我從imageNamed:獲得的圖像,只要我喜歡就使用它,或者我必須始終致電imageNamed:UIImage的緩存行爲

回答

2

imageNamed:返回的UIImage對象與內存管理所用的所有其他對象一樣被對待。如果要在方法調用之間保留對象的引用,那麼在完成引用計數遞減後,應該使用retain it和release

UIImage * cachedImage; 

-(void) getTheImage { 
    UIImage * cachedImage = [[UImage imageNamed:@"MyImage.png"] retain]; 
    //Do something with the image... 
} 
//In some other method or dealloc 
[cachedImage release]; 

此外,請注意,UIImage class reference說:

在低存儲器的情況下,圖像數據 可以從UIImage對象進行沖洗以在系統上 釋放內存。 This 清除行爲僅影響 UIImage對象內部存儲的 圖像數據,而不影響對象 本身。當您嘗試繪製其數據已被清除的 圖像時, 圖像對象會自動從其原始文件中重新加載 數據。然而,這個額外加載步驟可能會導致性能降低。

0

UIImage緩存數據本身。你不能拿着一個指針,只是通過它。這可能是不安全的,因爲當有內存警告並且沒有強引用時,UIImage將清除緩存的數據。每次調用[UIImage imageNamed:]。它速度很快,並將ref從內存返回給圖像。如果圖像不再在內存中,它將重新加載並通過該參考文獻