在dealloc方法中只释放引用并解除监听
对象在经历其生命周期之后,最终会为系统所回收,这时就要执行dealloc方法了。在每个对象的生命周期内,此方法只执行一次,也就是当保留计数降为0的时候。然而具体何时执行,则无法保证。系统并不能保证每个创建出来的对象的dealloc都会执行。极个别情况下,当应用程序终止时,仍有对象处于存活状态,这些对象没有收到dealloc消息。由于应用程序终止之后,其占用的资源也会返还给操作系统,所以实际上这些对象也就等于是消亡了。不调用dealloc方法是为了优化程序效率,而这也说明系统未必会在每个对象上调用起dealloc方法。
1.释放指向其它对象的引用。
2.释放所拥有的非Objective-C对象,比如CoreFoundation对象等由纯C的API所生成的就必须手工释放。
3.取消原来订阅的“键值观测”(KVO)或NSNotificationCenter等通知。
尽量保证dealloc中只做这三件事,不要再做任何事情!!
4.如果对象持有文件描述符等系统资源,那么应该专门编写一个方法来释放此种资源。这样的类要和其他使用者约定,用完资源后必须调用close方法。
5.执行异步任务的方法不应该在dealloc中调用;只能在正常状态下执行的那些方法也不应在dealloc中调用,因为此时对象已经处于正在回收状态了。
6.dealloc中也不要调用属性的存取方法,因为有人可能会覆写这些方法,并与其中做一些无法在回收阶段安全执行的操作。