为什么要释放您已设置为nil的属性?

以下是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]; } 

- (void)viewDidUnload不能保证调用- (void)viewDidUnload ,所以你应该总是在dealloc中释放东西。

看到这个问题 ,找出它何时被调用,以及它应该做什么。

不,因为你不能依赖于在释放时调用viewDidUnloadviewDidUnload仅在视图控制器在其视图不在屏幕上时收到内存警告时调用。 如果取消分配视图控制器,则不会调用viewDidUnload (AFAIK,我不完全确定)。

因为总是在dealloc中清理你的ivars是一个好习惯。 可能会出现问题,或者您可能会遇到您不期望的执行。

eventsArray设置为nil只意味着它没有内容,但仍然是内容空间调用[eventsArray release]释放数组所消耗的空间。