在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中也不要调用属性的存取方法,因为有人可能会覆写这些方法,并与其中做一些无法在回收阶段安全执行的操作。

posted on 2018-03-01 15:43  jack.xi  阅读(248)  评论(0)    收藏  举报

导航