我从apple docs阅读约unowned
。安全的无人驾驶快速
与弱引用一样,非引用引用对其所引用的实例不保留强保持 。然而,与弱引用不同,假设无主引用始终有一个值。因此, 一个无主的引用总是被定义为一个非选项类型。
所以它似乎是无主的类似弱,但他们是非可选项。
我想知道如果引用的无主被释放时会发生什么。为什么没有像可选项那样的检查。
我的意思是我可以做这样的事情,
class Customer {
let name: String
var card: CreditCard?
init(name: String) {
self.name = name
}
deinit { print("\(name) is being deinitialized") }
}
class CreditCard {
let number: UInt64
unowned let customer: Customer
init(number: UInt64, customer: Customer) {
self.number = number
self.customer = customer
}
deinit { print("Card #\(number) is being deinitialized") }
}
var card: CreditCard? = nil
do {
var john: Customer
john = Customer(name: "John Appleseed")
john.card = CreditCard(number: 1234_5678_9012_3456, customer: john)
card = john.card
}
print("Card belongs to \(card?.customer.name)")
在最后一行假设一个unowned
总是有一个值尝试打印卡持有人的名字,我得到了一个“执行被中断,原因:EXE_BREAKPOINT ......”
我想不应该有这样的问题,还是应该在线路是某种安全检查card = john.card
可能的重复[是否将无主的引用设置为'无'时被初始化?](http://stackoverflow.com/questions/33491392/are-unowned-references-set-to-nil-when-deinitialized) – zneak