1. 什么是弱引用和无主引用?
弱引用、无主引用: 允许引用环中的一个实例引用另外一个实例,但不是强引用。
2. 弱引用
弱引用 weak 对于生命周期中引用会变为nil的实例,使用弱引用;
声明属性或者变量的时候,关键字weak表明引用为弱引用;
弱引用不会增加实例的引用计数,因此不会阻止ARC销毁被引用的实例。这种特性使得引用不会变成强引用;
弱引用只能声明为变量类型,因为运行时它的值可能改变;弱引用绝对不能声明为常量。
因为弱引用可以没有值,所以声明弱引用的时候必须是可选类型的。
3. 无主引用
无主引用 unowned 对于初始化赋值之后引用再也不会赋值为nil的实例,使用无主引用;
无主引用默认始终有值;所以只能定义为非可选值类型;在属性、变量前添加unowned关键字,可以声明一个无主引用;
非可选类型变量不能赋值为nil,因此当实例被销毁的时候,ARC无法将引用赋值为nil;
当实例被销毁时,视图访问实例的无主引用会触发运行时错误;因此使用无主引用时请确保引用始终指向一个未销毁的实例;
网友评论