2011-04-19 39 views
0

例如:UILabel/UIbutton等如何從內存中釋放它們後仍能工作?

 UILabel *lblEmail = [[UILabel alloc] initWithFrame:CGRectMake(20, 10, 70, 30)]; 
[lblEmail setBackgroundColor:[UIColor clearColor]]; 
[lblEmail setText:@"Email"]; 
[lblEmail setTag:1]; 
[contentView addSubview:lblEmail]; 
[lblEmail release]; 

在上面的代碼中,我們創建一個的UILabel和釋放,因此沒有內存引用了,但它仍然當我運行的應用程序的作品。我們也可以使用viewWithTag來改變它的值。其他的例子是我創建一個按鈕並釋放它,但仍然在用戶點擊它工作的按鈕時。

回答

4

內容視圖保留了標籤/按鈕,所以它仍然存在。你創建它的保留計數爲1,將它添加到contentView使其保留計數爲2,並釋放它使其保留計數爲1。所以它仍然在。

3

它沒有從內存中釋放。你只是釋放你的它的保留。當你將它作爲contentView的子視圖添加時,它將保留在那裏。

+0

是的,我知道這一點保留......但讓我們在我的內容觀點有10個標籤和文本框10登記表的情況下......然後我的內容查看保留計數是21 ...我如何管理這種情況? – Prabh 2011-04-19 15:36:58

+0

你可以通過遵循一個簡單的規則來管理它......如果你負責創建(alloc/init,copy等)或保留一個對象,你有責任釋放。 – MarkPowell 2011-04-19 15:40:13

+0

您的contentView保留計數不是21.如果您添加10個標籤和10個textField,則每個標籤和文本字段的保留計數爲1,並且contentView本身的保留計數爲1(假定應用程序中沒有任何其他保留這些對象)。 – Christian 2011-04-19 16:36:36

0

lblEmail只有在引用計數爲0時纔會被釋放。它由contentView保留。