• 在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中调用其他方法,包括属性的存取方法。

     
  • 相关阅读:
    docker学习笔记1-- 用Toolbox安装Docker--介绍Docker Machine
    IDEA中文出现乱码解决
    hadoop本地运行与集群运行
    关于IDEA导出项目jar包/runnable jar
    IDEA 添加jar包的三种方式(重点:new uer Libraries)
    windows下客户端开发hdf--环境搭建
    junit在idea中的使用(1)--理论篇
    word的"bug"
    第4章 控制执行流程
    第3章 操作符
  • 原文地址:https://www.cnblogs.com/liuziyu/p/4184693.html
Copyright © 2020-2023  润新知