2011-10-27 77 views
2

我想知道爲什麼在它的dealloc函數中,一個對象的剩餘量等於1。Xcode retaincount = 1裏面的dealloc

-(void) dealloc 
{ 
    NSlog(@"retain count = %i ", [self retaincount]); 
    [super dealloc]; 
} 

保留計數= 1所以該對象如何調用其dealloc函數,儘管其保留計數等於1。正如我所知,當保留計數等於零時,該對象調用該函數。

+0

是,這意味着對象仍然活着????? – SamehDos

+2

從來沒有指望retainCount http://stackoverflow.com/questions/4636146/when-to-use-retaincount – vikingosegundo

+1

我同意,不要使用保留計數作爲您發佈的所有其他答案。但是如果我調用[super dealloc],如果你先調用'[super dealloc]' –

回答

9

因爲對象的保留計數不能爲零。

將它減少到零是浪費週期,因爲無論如何該對象都會被釋放。 retainCount可以從未返回0

和:

retainCount是沒用的。別叫它。

謝謝。但我怎麼能調試一個對象的存在?

幾種方法;

  • 的NSLog()在-dealloc
  • 上的dealloc,打印一些斷點,繼續
  • 使用殭屍
  • 用途分配儀器
  • 使用Heapshot analysis
+0

謝謝。但我怎麼能調試一個對象的存在? – SamehDos

+0

+1'retaincount is useless'XD –

3

在調用[super dealloc];之前,您可以考慮在dealloc方法中該對象仍然活着。這使您可以調用self上的消息在dealloc中進行一些清理。這就是爲什麼[super dealloc];應該總是最後被調用。 This post詳細說明了爲什麼你不應該在dealloc中(或者在任何地方)保留數量。