2011-02-23 54 views
6

下面是一個視圖控制器兩種方法從Apple教程:爲什麼要釋放你已經設置爲零的屬性?

- (void)viewDidUnload { 
    self.eventsArray = nil; 
    self.locationManager = nil; 
    self.addButton = nil; 
} 

- (void)dealloc { 
    [managedObjectContext release]; 
    [eventsArray release]; 
    [locationManager release]; 
    [addButton release]; 
    [super dealloc]; 
} 

無法將dealloc方法縮短爲下列?如果不是,爲什麼不呢?

- (void)dealloc { 
    [managedObjectContext release]; 
    [super dealloc]; 
} 

回答

5

- (void)viewDidUnload不保證被調用,所以你應該總是在dealloc中釋放東西。

請參閱this question瞭解它何時被調用,以及您應該做什麼。

3

不行,因爲你不能依靠viewDidUnload在釋放被調用。 viewDidUnload僅當視圖控制器在視圖不在屏幕上時接收到內存警告時才被調用。如果視圖控制器被取消分配,viewDidUnload不被調用(AFAIK,我不完全確定)。

1

因爲總是在dealloc中清理你的ivars是個好習慣。有些事情可能會出錯,或者你可能會遇到你不期望的執行。

-1

設置eventsArraynil只是表示它沒有內容,但仍爲內容空間 調用[eventsArray release]釋放陣列消耗的空間。

+2

不是。如果'eventsArray'是保留或複製屬性,將其設置爲'nil'會有效釋放後備對象(如果有的話)。 – 2011-02-23 11:55:04

相關問題