2011-04-24 45 views
0
-(void)viewDidUnload{ 
    [childController release], childController = nil; 
} 

-(void)dealloc{ 
    [childController release]; 
} 

我看到了上面提到的方法,很好奇爲什麼childController在兩個版本中都被釋放了?爲什麼在viewDidUnload裏面有一個release語句?

+1

不要忘記在你的'-dealloc'方法的末尾發送'[super dealloc]'。 – 2011-04-24 04:26:05

回答

3

當視圖不可見時,可以在低內存警告情況下調用ViewDidUnload,在這種情況下,需要釋放loadView/viewDidLoad或保留的NIB插口中創建/保留的任何對象。如果再次/顯示視圖控制器的視圖,這些對象可能/將被重新創建。很顯然,不處理viewDidUnload中對象的釋放會導致內存泄漏和崩潰。

一般情況下,您還希望將viewDidUnload中的值清零,以便在調用垃圾對象上的釋放時,在viewDidUnload(未重新加載視圖)後對dealloc的後續調用不會導致崩潰。

通常,對於屬性,您只需要在viewDidUnload中執行self.childController = nil;,該操作既可以處理對象的釋放,也可以處理對象的零。

+0

感謝您的詳細解釋。我想我的理解是,在viewDidUnload中,我們所做的一切都是將東西設置爲零,並在dealloc中我們發佈了一些東西。 – jini 2011-04-24 05:09:30