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]
[关闭示例]