弱引用和无主引用用于防止两个对象相互持有引用而导致的循环引用问题。我理解弱引用的使用,但不理解无主引用的使用。以下是苹果提供的一个场景示例,其中一个对象应该使用无主引用:
class Customer {
let name: String
var card: CreditCard?
init(name: String) { self.name = name }
}
class CreditCard {
let number: UInt64
unowned let customer: Customer
init(number: UInt64, customer: Customer) {
self.number = number
self.customer = customer
}
}
这个想法是,没有客户就无法存在信用卡。因此,信用卡可以省去使用弱引用所需的可选解包步骤,并可以使用无主引用。嗯...那为什么不使用强引用呢?如果所有其他对客户的引用都消失了(这不应该发生?),那么信用卡使用拥有的引用会导致崩溃;而使用强引用则会导致内存泄漏。哎呀?两害相权取其轻?最好崩溃,因为这更容易在开发和测试期间被注意到。请给予一些见解。谢谢。
unowned
引用,程序将立即崩溃。编译器唯一“信任”您(在假定您知道自己在做什么并且不生成安全检查的意义上)的时候是当您使用名称中带有unsafe
的对象或函数时。 - rob mayoff