-(void)viewDidUnload{
[childController release], childController = nil;
}
-(void)dealloc{
[childController release];
}
我看到了上面提到的方法,很好奇爲什麼childController在兩個版本中都被釋放了?爲什麼在viewDidUnload裏面有一個release語句?
-(void)viewDidUnload{
[childController release], childController = nil;
}
-(void)dealloc{
[childController release];
}
我看到了上面提到的方法,很好奇爲什麼childController在兩個版本中都被釋放了?爲什麼在viewDidUnload裏面有一個release語句?
當視圖不可見時,可以在低內存警告情況下調用ViewDidUnload,在這種情況下,需要釋放loadView/viewDidLoad或保留的NIB插口中創建/保留的任何對象。如果再次/顯示視圖控制器的視圖,這些對象可能/將被重新創建。很顯然,不處理viewDidUnload中對象的釋放會導致內存泄漏和崩潰。
一般情況下,您還希望將viewDidUnload中的值清零,以便在調用垃圾對象上的釋放時,在viewDidUnload(未重新加載視圖)後對dealloc的後續調用不會導致崩潰。
通常,對於屬性,您只需要在viewDidUnload中執行self.childController = nil;
,該操作既可以處理對象的釋放,也可以處理對象的零。
感謝您的詳細解釋。我想我的理解是,在viewDidUnload中,我們所做的一切都是將東西設置爲零,並在dealloc中我們發佈了一些東西。 – jini 2011-04-24 05:09:30
不要忘記在你的'-dealloc'方法的末尾發送'[super dealloc]'。 – 2011-04-24 04:26:05