swift 内存管理

100 阅读1分钟

跟OC一样,Swift也是采取基于引用计数的ARC内存管理方案(针对堆空间) Swift的ARC中有3种引用 

口强引用 (strong reference):默认情况下,引|用都是强引用

 弱引用( weak reference):通过weak定义弱引用 必须是可选类型的var,因为实例销毁后,ARC会自动将弱引用设置为nil ARC自动给弱引用设置nil时,不会触发属性观察器

 口无主引用(unowned reference):通过unowned定义无主引用 /不会产生强引用,实例销毁后仍然存储着实例的内存地址(类似于OC中的unsafe_unretained 试图在实例销段后访问无主引用,会产生运行时错误(野指针)

 Fatal error: Attempted to read an unowned reference but object Oxo was already dealLocated

循环引用

weak. unowned 都能解决循环引用的问题,unowned 要比 weak 少一些性能消耗 在生命周期中可能会变为 niL 的使用 weak 初始化赋值后再也不会变为 n11 的使用 unowned

  lazy var fn:(()->()) = {[weak self] in
        self?.run()
    }
    func run() {    }