为什么要释放您已设置为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中释放东西。
看到这个问题 ,找出它何时被调用,以及它应该做什么。
不,因为你不能依赖于在释放时调用viewDidUnload
。 viewDidUnload
仅在视图控制器在其视图不在屏幕上时收到内存警告时调用。 如果取消分配视图控制器,则不会调用viewDidUnload
(AFAIK,我不完全确定)。
因为总是在dealloc中清理你的ivars是一个好习惯。 可能会出现问题,或者您可能会遇到您不期望的执行。
将eventsArray
设置为nil
只意味着它没有内容,但仍然是内容空间调用[eventsArray release]
释放数组所消耗的空间。