2 回答

慕哥9229398
TA貢獻1877條經驗 獲得超6個贊
Q1。“無主參考”與“弱參考”有何不同?
弱參考:
弱引用是一種引用,它不會強制保留它引用的實例,因此不會阻止ARC處理引用的實例。因為弱引用被允許具有“無值”,所以必須將每個弱引用聲明為具有可選類型。(Apple Docs)
無主參考:
與弱引用一樣,無主引用并不會強烈保留它所引用的實例。然而,與弱引用不同,假定無主引用始終具有值。因此,無主引用始終定義為非可選類型。(Apple Docs)
何時使用每個:
只要對該引用有效,就使用弱引用在其生命周期的某個時刻變為nil。相反,當您知道在初始化期間設置引用后永遠不會為nil時,請使用無主引用。(Apple Docs)
Q2。什么時候使用“無主參考”是安全的?
如上所述,假定無主參考始終具有值。因此,只有在確定引用永遠不會為零時才應使用它。Apple Docs通過以下示例說明了無主引用的用例。
假設我們有兩個類Customer
和CreditCard
??蛻艨梢栽跊]有信用卡的情況下存在,但沒有客戶就不會存在信用卡,即可以假設信用卡將始終擁有客戶。所以,他們應該有以下關系:
class Customer { var card: CreditCard?}class CreditCard { unowned let customer: Customer}
Q3。“無主參考”是否引用了C / C ++中的“懸空指針”等安全風險
我不這么認為。
由于無主引用只是保證具有值的弱引用,因此它不應該以任何方式存在安全風險。但是,如果您嘗試在其引用的實例被取消分配后訪問無主引用,則會觸發運行時錯誤,應用程序將崩潰。
這是我看到的唯一風險。
- 2 回答
- 0 關注
- 804 瀏覽
添加回答
舉報
0/150
提交
取消