zoukankan      html  css  js  c++  java
  • 在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中调用其他方法,包括属性的存取方法。

     
  • 相关阅读:
    信号与系统04 离散时间傅里叶变换
    什么是吉布斯现象
    部分分式展开
    常见的傅里叶变换对
    微分运算的时域扩展
    动态库和静态库的制作与使用 【转载】原文链接https://www.cnblogs.com/WindSun/p/11287927.html
    派生访问说明符
    自定义异常类
    C++虚函数
    Linux知识点
  • 原文地址:https://www.cnblogs.com/liuziyu/p/4184693.html
Copyright © 2011-2022 走看看