2010-05-06 28 views
0

我的UIButton有它的背景圖片設置是這樣的:UIButton setBackgroundImage消耗不釋放內存?

[myImageButton setBackgroundImage:[UIImage imageNamed:myImageName] forState:UIControlStateNormal]; 

myImageButton是類的保留的性質,並建立與IB。沒有其他地方在應用程序中訪問。

myImageName僅僅是與像@文件名一個NSString 「myImage_number_1.png」

我加載大圖像,1024×1024的大小。當顯示視圖時,它會使用上述語句更改圖像,然後可用內存減少。

當我看到關於7-9個不同時間的視圖後,該應用程序崩潰並帶有內存警告。

我認爲該方法將釋放加載的圖像。

視圖本身只是實例化和分配一次,因此如果視圖控制器不在保留/釋放週期中。

有沒有關於這個setBackgroundImage我不知道,導致它不釋放內存?

回答

4

啊,找到它了。每次使用imageNamed加載圖像時,它都會將圖像緩存在內存中。我切換到imageWithContentsOfFile - 它不緩存圖像。

0

對於未來的編碼器,@just_another_coder答案是正確的,但是你應該知道的東西。

[UIImage imageNamed:myImageName]將圖像加載到特殊的系統緩存中,然後使用該圖像路徑將來的調用將返回緩存中的圖像,而不是將其從磁盤重新加載。

[UIImage imageWithContentsOfFile]只是將圖像加載到指定的路徑上,但不執行緩存。對同一圖像多次調用imageWithContentsOfFile將導致內存中有多個副本。

所以,你應該想想哪一個你喜歡的話,並且如果使用imagewithcontentsoffile你要記得零出該按鈕,否則你將註定要在不斷增長的應用程序(內存使用方面)