我看过周围的示例源代码使用不同的方式释放/解除对象,所以我想知道哪种方式被认为是"最好的".一些选项-dealloc
:
1)释放对象
- (void)dealloc { [obj1 release]; [obj2 release]; [super dealloc]; }
2)将对象设置为nil
- (void)dealloc { self.obj1 = nil; self.obj2 = nil; [super dealloc]; }
3)直接取消分配对象
- (void)dealloc { [obj1 dealloc]; [obj2 dealloc]; [super dealloc]; }
哪种方式最好?每个人的利弊?
方法1是唯一推荐的方法.在你释放它们之后将它们设置为nil也是一种好习惯.
方法2仅适用于管理自己的对象/值保留的属性,因此它不是普遍适用的.如果您实现自己的setter方法,该方法在属性更改时执行其他操作,则可以通过在[dealloc]中调用它来获得不需要的副作用.
方法3违反了引用计数原则,因为它会释放对象,即使其他对象有[retain]保留,所以当其他对象接下来访问它们时,程序将崩溃.你永远不应该直接调用[dealloc] - 让运行时在最后一个所有者调用[release]时调用它.