iOS知识点-11.请说明并比较以下关键词:strong, weak, unowned

Swift Basics
  1. 请说明并比较以下关键词:strong, weak, unowned

Swift 的内存管理机制与 Object-C一样为 ARC(Automatic Reference Counting)。它的基本原理是,一个对象在没有任何强引用指向它时,其占用的内存会被回收。反之,只要有任何一个强引用指向该对象,它就会一直存在内存中。

  • strong 代表着强引用,是默认属性。当一个对象被声明为 strong 时,就表示父层级对该对象有一个强引用的指向。此时该对象的引用计数会增加1。
  • weak 代表着弱引用。当对象被声明为 weak 时,父层级对此对象没有指向,该对象的引用计数不会增加1。它在对象释放后弱引用也随即消失。继续访问该对象,程序会得到nil,不会崩溃。
  • unowned 与弱引用本质上一样。唯一不同的是,对象在释放后,依然有一个无效的引用指向对象,它不是 Optional 也不指向 nil 。如果继续访问该对象,程序就会崩溃。

加分回答:

weak 和 unowned 的引入是为了解决由 strong 带来的循环引用问题。简单来说,就是当两个对象互相有一个强指向去指向对方,这样导致两个对象在内存中无法释放。

weak 和 unowned 的使用场景有如下差别:

  • 当访问对象时该对象可能已经被释放了,则用 weak。比如delegate的修饰。
  • 当访问对象确定不可能被释放,则用 unowned。比如self的引用。
  • 实际上为了安全起见,很多公司规定任何时候都是用weak去修饰。
上一题 目录 下一题

你可能感兴趣的:(iOS知识点-11.请说明并比较以下关键词:strong, weak, unowned)