init 和 dealloc 内避免使用访问器
Tip
在 init
和 dealloc
方法执行的过程中,子类可能会处在一个不一致的状态,所以这些方法中的代码应避免调用访问器。
子类尚未初始化,或在 init
和 dealloc
方法执行时已经被销毁,会使访问器方法很可能不可靠。实际上,应在这些方法中直接对 ivals 进行赋值或释放操作。
正确:
- - (id)init {
- self = [super init];
- if (self) {
- bar_ = [[NSMutableString alloc] init]; // good
- }
- return self;
- }
- - (void)dealloc {
- [bar_ release]; // good
- [super dealloc];
- }
错误:
- - (id)init {
- self = [super init];
- if (self) {
- self.bar = [NSMutableString string]; // avoid
- }
- return self;
- }
- - (void)dealloc {
- self.bar = nil; // avoid
- [super dealloc];
- }