Swift 强、弱、无主引用
【Objective-C 属性属性】
ARC
-Automatic Reference Counting
是一种管理内存的机制,适用于[About]reference
类型。一个对象只有在有 0 个引用时才会被释放。
Strong reference
- 默认设置,在线性关系中使用这种类型是安全的(没有循环)
Retain cycle
- 这是一种情况,每个对象都对彼此有很强的引用
打破Retain cycle
:weak
和unowned
. 它们都不会将对象的保留计数增加+1
,并且具有下一个差异
Weak reference
- 当引用对象被释放(是nil
)时,也ARC
设置一个 weak
引用nil
。这就是为什么weak
引用是一个变量var
(不能是一个常量let
)[var vs let],这就是为什么它是一个optional
weak var delegate: <Type>?
一般的
unowned
- 当引用对象被释放(是nil
)时,unowned
不会变成a nil
,因为ARC
没有设置它。这就是为什么unowned
参考是非可选的
无主(默认)
safe unowned
-如果引用被释放,runtime safety check
则用于抛出异常。unowned
Fatal error: Attempted to read an unowned reference but object 0x7fa5dad3f0f0 was already deallocated
无主(不安全)
unowned(unsafe)
通过操作UnsafePointer
可以创建一个dangling pointer
. __unsafe_unretained
从Objective-C
. 它是一种ARC
不处理的直接内存访问。它会产生意想不到的行为,而不仅仅是一些崩溃。它有更好的性能
EXC_BAD_ACCESS
[EXC_BAD_ACCESS]
[关闭示例]