Swift strong、weak、unowned的区别
2018-11-27 本文已影响16人
ChancePro
strong代表强引用,是默认属性。
当一个对象被声明为strong时,就表示父层级对该对象有一个强引用的指向。此时该对象的引用计数会增加1。
weak代表弱引用。
当对象被声明为weak时,父层级对此对象没有指向,该对象的引用计数不会增加1。它在对象释放后弱引用也随即消失。继续访问该对象,程序会得到nil,不会崩溃。
unowned与弱引用本质上一样。
唯一不同的是,对象在释放后,依然有一个无效的引用指向对象,它不是Optional也不指向nil。如果继续访问该对象,程序就会崩溃。
weak和unowned的使用场景
- 当访问对象可能已经被释放了,则用weak。比如delegate的修饰。
- 当访问对象确定不可能被释放,则用unowned。比如self的引用。
- 为了安全起见,很多公司规定任何时候都使用weak去修饰。