2 回答

TA貢獻(xiàn)1877條經(jīng)驗(yàn) 獲得超6個(gè)贊
Q1。“無主參考”與“弱參考”有何不同?
弱參考:
弱引用是一種引用,它不會(huì)強(qiáng)制保留它引用的實(shí)例,因此不會(huì)阻止ARC處理引用的實(shí)例。因?yàn)槿跻帽辉试S具有“無值”,所以必須將每個(gè)弱引用聲明為具有可選類型。(Apple Docs)
無主參考:
與弱引用一樣,無主引用并不會(huì)強(qiáng)烈保留它所引用的實(shí)例。然而,與弱引用不同,假定無主引用始終具有值。因此,無主引用始終定義為非可選類型。(Apple Docs)
何時(shí)使用每個(gè):
只要對(duì)該引用有效,就使用弱引用在其生命周期的某個(gè)時(shí)刻變?yōu)閚il。相反,當(dāng)您知道在初始化期間設(shè)置引用后永遠(yuǎn)不會(huì)為nil時(shí),請(qǐng)使用無主引用。(Apple Docs)
Q2。什么時(shí)候使用“無主參考”是安全的?
如上所述,假定無主參考始終具有值。因此,只有在確定引用永遠(yuǎn)不會(huì)為零時(shí)才應(yīng)使用它。Apple Docs通過以下示例說明了無主引用的用例。
假設(shè)我們有兩個(gè)類Customer
和CreditCard
??蛻艨梢栽跊]有信用卡的情況下存在,但沒有客戶就不會(huì)存在信用卡,即可以假設(shè)信用卡將始終擁有客戶。所以,他們應(yīng)該有以下關(guān)系:
class Customer { var card: CreditCard?}class CreditCard { unowned let customer: Customer}
Q3?!盁o主參考”是否引用了C / C ++中的“懸空指針”等安全風(fēng)險(xiǎn)
我不這么認(rèn)為。
由于無主引用只是保證具有值的弱引用,因此它不應(yīng)該以任何方式存在安全風(fēng)險(xiǎn)。但是,如果您嘗試在其引用的實(shí)例被取消分配后訪問無主引用,則會(huì)觸發(fā)運(yùn)行時(shí)錯(cuò)誤,應(yīng)用程序?qū)⒈罎ⅰ?/p>
這是我看到的唯一風(fēng)險(xiǎn)。
- 2 回答
- 0 關(guān)注
- 803 瀏覽
添加回答
舉報(bào)