我從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