高效编写代码的方法(二十三):dealloc
2016-09-27 本文已影响372人
蜂猴
Dealloc
每一个OC对象最后应该都会调用dealloc方法,表示结束了生命周期,在内存中销毁,以引用计数来说就是引用数降为0的时候就会马上执行dealloc方法进行对象销毁。
不要主动调用dealloc
不要主动调用任何对象的dealloc方法,因为你不知道这个对象在什么时候还正在被使用,ARC会帮助我们妥善进行处理,实际编译器也会阻止我们这么做。
在dealloc中应该做的事
- 1 不要调用[super dealloc]
- 2 不用刻意释放该对象持有的其他对象,ARC会处理。
- 3 使用CFRelease()去释放非OC类的对象(CF类),因为它们的纯C的,ARC管不着。
- 4 释放观察行为(KVO,noticication)。可以防止向不存在的对象发送通知造成crash。
结果大概这样:
- (void)dealloc
{
CFRelease(someCoreFoundationObjects);
[[NSNotificationCenter defaultCenter] removeObserver:self];
}
其他
不是所有销毁都会调用dealloc
在程序terminate的时候,为了优化不会一一朝每一个对象发送dealloc,对象会跟着整个程序被销毁,因此不是所有对象销毁的时候都会调用dealloc。感觉这个知道就行,实际使用起来应该不会造成太大问题。
尽量不要在dealloc中调用一些方法
因为某些异步的操作会使得异步返回的结果是该对象还是在内存中的,而实际可能已经被销毁。