weak属性设置为nil

结论:本测试主要得出的结果是weak属性是在属性调用deinit or dealloc前被设置nil

1> 验证代码如下(swift)

class WeakTest {
    
    weak var obj: AnyObject?
    deinit {
        print(obj) /// nil 当前实例对象在deinit完全释放前,weak obj对象就已经被设置nil
        print(self)
        /// 等deinit完成后,才会使用free释放空间,真正销毁
    }
    init() {
        obj = self
    }
    
}

2> 销毁调用顺序:

  • {count = 0}
  • {weak = nil}
  • {self -> (super) -> 属性} <dealloc deinit> 父类的dealloc会在子类dealloc返回后自动调用
  • {解除关联属性 Associate <释放空间>}
  • {解除weak属性<不解除,当weak属性为nil时,反找属性设置nil会段错误>}
  • free
    可以参考一下: dealloc内部原理

3> dealloc deinit 不需要调用super理解

  • 对于OC,比较好理解dealloc的调用,但swift还是存在一些疑惑,由于没有[super dealloc],OC可以根据selector在自己的方法列表找,找到就直接调用(不是发消息,消息会递归到父类),但swift没有运行时,那么是不是在编译的时候根据代码有没有deinit就直接绑定函数地址进行调用?
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 这是16年5月份编辑的一份比较杂乱适合自己观看的学习记录文档,今天18年5月份再次想写文章,发现简书还为我保存起的...
    Jenaral阅读 2,892评论 2 9
  • 1.ios高性能编程 (1).内层 最小的内层平均值和峰值(2).耗电量 高效的算法和数据结构(3).初始化时...
    欧辰_OSR阅读 29,688评论 8 265
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,161评论 1 32
  • 我们几个简书上的朋友准备举办一个读书会,昨天下午在一初空间里谈一些筹备的事情。 说起来也真的是缘分,我们几个在之前...
    精进的医生阅读 899评论 94 69
  • 齐齐写了一篇文章叫《暑假》,我不如也来写写自已的暑假吧。 读书时我们最盼望的就是放假了,尤其是长达两个月的暑假。 ...
    A紫烟霞阅读 141评论 0 0