美文网首页
weak属性设置为nil

weak属性设置为nil

作者: craig_wang | 来源:发表于2018-09-18 17:18 被阅读9次

    结论:本测试主要得出的结果是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就直接绑定函数地址进行调用?

    相关文章

      网友评论

          本文标题:weak属性设置为nil

          本文链接:https://www.haomeiwen.com/subject/sznpnftx.html