2012-03-24 25 views
1

創建UILabel並再次釋放時,如果我想重複使用它直到我的數組中的記錄不存在,那麼正確的方法是什麼?回收循環中的標籤並釋放它們

我想這本:

// create label 
UILabel *labelIWishToRecycle; 

for (int i = 0; i < [myArrayFullOfItems count]; i++) { 
    // Edit the label 
    labelIWishToRecycle = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 320, 640)]; 
} 

// Release label 
[labelIWishToRecycle release]; 

當我這樣做,這樣我得到一個崩潰釋放它。所以我只是不釋放它。現在就像魅力一樣。當然,這不是方式,所以我想知道是什麼。

我應該爲數組中的每個項目創建並釋放標籤嗎?或者我應該在for循環之外創建它,但是在內部釋放它?要麼 ...?

在此先感謝。

+0

從您發佈的東西,它看起來像你實例labelIWishToRecycle多次,但釋放它只有一次。這將解釋崩潰。如果你永遠不會釋放它,程序將運行,但你會得到一個泄漏。 – 2012-03-25 00:24:33

回答

0

你用什麼標籤!?如果您將它添加到視圖中,那麼每次都必須使用新實例..如果您只進行尺寸計算或類似的東西,那麼您可能會一遍又一遍地使用同一個標籤。

但關鍵是初始化局部變量: UILabel *labelIWishToRecycle = nil;

如果你這樣做了,它是保存發送它的release(如果還沒有真正的標籤已尚未分配)。之前,您的指針指向一個隨機地址,並且您試圖釋放該地址處的對象。在大多數情況下,這將是一場崩潰。

(猜測的問題的情況下是一個,當你的陣列計數爲零。)

相關問題