iOS中 weak 的原理

weak 的作用

weak 關(guān)鍵字的作用弱引用,所引用對(duì)象的計(jì)數(shù)器不會(huì)加一,并在引用對(duì)象被釋放的時(shí)候自動(dòng)被設(shè)置為 nil。

如何實(shí)現(xiàn) weak

現(xiàn)在我們將? weak 的思路整理一下:

整個(gè)系統(tǒng)中存在很多個(gè)對(duì)象,這些對(duì)象都可能會(huì)被弱引用,那么我們需要一個(gè)容器來容納這些被弱引用的對(duì)象,比如數(shù)組,在此將這個(gè)容器的數(shù)據(jù)結(jié)構(gòu)標(biāo)識(shí)為objectContainerDataStructure;

一個(gè)對(duì)象可能會(huì)被多次弱引用,當(dāng)這個(gè)對(duì)象被銷毀時(shí),我們需要找到這個(gè)對(duì)象的所有弱引用,所以我們需要將這些弱引用的地址(即指針)放在一個(gè)容器里,比如數(shù)組,在此將這些弱引用的地址的數(shù)據(jù)結(jié)構(gòu)標(biāo)識(shí)為pointerContainerDataStructure;

當(dāng)對(duì)象不再被強(qiáng)引用時(shí)需要銷毀的時(shí)候,我們需要通過這個(gè)對(duì)象在objectContainerDataStructure找到其對(duì)應(yīng)的pointerContainerDataStructure,進(jìn)而找到這個(gè)對(duì)象的所有弱引用,將其置為 nil,

通過上面的步驟,我們大概可以得出這么一個(gè)數(shù)據(jù)結(jié)構(gòu):

pointerContainerDataStructure僅僅只是容納一個(gè)對(duì)象的所有弱引用的地址,所以用數(shù)組即可;

objectContainerDataStructure是一個(gè) key-value 數(shù)據(jù)結(jié)構(gòu),將對(duì)象作為 key,對(duì)象的內(nèi)存地址是最好的選擇;

在 iOS 中常用的 key-value 數(shù)據(jù)結(jié)構(gòu)就是字典 Dictionary ,在這里我們的 key 是一個(gè)數(shù)值對(duì)象,value 則是一個(gè)數(shù)值數(shù)組對(duì)象,可以用哈希表實(shí)現(xiàn);

總結(jié),為了實(shí)現(xiàn) weak,我們需要這樣的一張弱引用表:

表的數(shù)據(jù)結(jié)構(gòu)是哈希表;

表的 key 是對(duì)象的內(nèi)存地址;

value 是指向該對(duì)象的所有弱引用的指針;

作者:Coder_JMicheal

鏈接:http://www.itdecent.cn/p/dd6c72fd5fd8

來源:簡(jiǎn)書

簡(jiǎn)書著作權(quán)歸作者所有,任何形式的轉(zhuǎn)載都請(qǐng)聯(lián)系作者獲得授權(quán)并注明出處。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容