2012-10-09 130 views
-1

可能重複後保留計數:
Reference count is still 1 after [obj release], when it should be deallocated對象釋放和零值

1.當我寫此代碼。

UILabel *label = [[UILabel alloc]initWithFrame:CGRectMake(10, 10, 100, 30)]; 
[self.view addSubview:label]; 
label.text [email protected]"label Text"; 

[label release]; 
[label release]; 

NSLog(@"LableRetainCount = %i \n",lable.retainCount); 

輸出:LableRetainCount 1.Lable保留計數從1減少爲什麼?

2.當我寫這段代碼。

UILabel *label = [[UILabel alloc]initWithFrame:CGRectMake(10, 10, 100, 30)]; 
    [self.view addSubview:lable]; 
    label.text [email protected]"lable Text"; 

    label = nil; 
    NSLog(@"LabelRetainCount = %i \n",label.retainCount); 

輸出:LabelRetainCount = 0當我設置「label = nil」它的保留計數變爲0爲什麼? 這是meane內存釋放此對象嗎?

  1. 對象是否被釋放?
  2. 現在我們不需要釋放它嗎?
  3. retainCount方法永遠不會返回0.這意味着對象在發佈之後是否還活着?
+3

[何時使用保留計數](http://whentouseretaincount.com/) – DrummerB

+1

某些原因:http://www.friday.com/bbum/2011/12/18/retaincount-is-useless/ – DrummerB

回答

1

在#2它返回0因爲你設置你的標籤指針爲零,這是0,當你調用一個函數在零它返回零,即0.所以它不真正返回一個retainCount它只是返回零。你必須明白,你將標籤設置爲零,它不再指向你的UILabel ...

如果你想正確地釋放它,像所有的方式0,首先你會這樣做後您的.text行:

​​3210

然後您的保留計數應該爲0,對象將被釋放。

+4

'retainCount'永遠不會返回0. –

+0

但retainCount永遠不會變成0爲什麼?當你釋放它,但是當你釋放它時,它的保留計數變爲零。釋放減少保留計數但從不爲零設置爲什麼? –

+0

對象保留計數1它表示對象存活。 –