首页 > 代码库 > 在dealloc方法中只释放引用和解除监听
在dealloc方法中只释放引用和解除监听
对象在经历其生命周期后,最终会为系统所回收,这时候就要执行dealloc方法,在每个对象的生命周期内,此方法仅执行一次,也就是当保留基数将为0的时候。
你绝不应该自己调用dealloc方法,运行期系统会在合适的时候调用它。且,一旦调用过dealloc之后,对象就不再有效,后续方法调用均是无效的。
在dealloc中应该主要做些什么呢?
1.释放对象所拥有的引用:也就是把所有的OC对象都释放掉,ARC会通过自动生成的 .cxx_destruct方法,在dealloc中为你自动添加这些代码。对象所拥有的非OC对象也要释放。比如CoreFoundation对象就必须手工释放,因为它是由纯C的API所生成的。
2.解除监听:那就是把原来配置过的观测行为(observation behavior)都清理掉。包括KVO和NSNotificationCenter等通知。
3.不要再做其他事情。
需要注意的一些要点:
1.若对象持有文件描述符等系统资源,那么应该专门编写一个方法来释放此种资源。这样的类要和使用者约定:用完资源后必须调用相应地close方法。
2.执行异步任务的方法不应在dealloc中调用;只能在正常状态下执行的那些方法也不应该在dealloc中调用,因为此时对象已处于正在回收的状态了。
3.不要在dealloc中调用其他方法,包括属性的存取方法。
在dealloc方法中只释放引用和解除监听
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。