热门搜索 :
考研考公
您的当前位置:首页正文

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
    可以参考一下:

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

  • 对于OC,比较好理解dealloc的调用,但swift还是存在一些疑惑,由于没有[super dealloc],OC可以根据selector在自己的方法列表找,找到就直接调用(不是发消息,消息会递归到父类),但swift没有运行时,那么是不是在编译的时候根据代码有没有deinit就直接绑定函数地址进行调用?
Top