init 和 dealloc 内避免使用访问器

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

错误: 1. - (id)init { 2. self = [super init]; 3. if (self) { 4. self.bar = [NSMutableString string]; // avoid 5. } 6. return self; 7. } 8.   9. - (void)dealloc { 10. self.bar = nil; // avoid 11. [super dealloc]; 12. }