實現 weak
weak 的作用
weak
關鍵字的作用弱引用,所引用物件的計數器不會加一,並在引用物件被釋放的時候自動被設定為nil
。
如何實現 weak
整個系統中存在很多個物件,這些物件都可能會被弱引用,那麼我們需要乙個容器來容納這些被弱引用的物件,比如陣列,在此將這個容器的資料結構標識為objectcontainerdatastructure
;
乙個物件可能會被多次弱引用,當這個物件被銷毀時,我們需要找到這個物件的所有弱引用,所以我們需要將這些弱引用的位址(即指標)放在乙個容器裡,比如陣列,在此將這些弱引用的位址的資料結構標識為pointercontainerdatastructure
;
當物件不再被強引用時需要銷毀的時候,我們需要通過這個物件在objectcontainerdatastructure
找到其對應的pointercontainerdatastructure
,進而找到這個物件的所有弱引用,將其置為nil
,
通過上面的步驟,我們大概可以得出這麼乙個資料結構:
pointercontainerdatastructure
僅僅只是容納乙個物件的所有弱引用的位址,所以用陣列即可;
objectcontainerdatastructure
是乙個key-value
資料結構,將物件作為key
,物件的記憶體位址是最好的選擇;
在ios
中常用的key-value
資料結構就是字典dictionary
,在這裡我們的key
是乙個數值物件,value
則是乙個數值陣列物件,可以用雜湊表實現;
總結為了實現weak
,我們需要這樣的一張弱引用表:
表的資料結構是雜湊表;
表的key
是物件的記憶體位址;
value
是指向該物件的所有弱引用的指標;
IOS 開發 weak內部原理
weak表其實是乙個hash 雜湊 表,key是所指物件的位址,value是weak指標的位址陣列。weak 的實現原理可以概括一下三步 1 初始化時 runtime會呼叫objc initweak函式,初始化乙個新的weak指標指向物件的位址。2 新增引用時 objc initweak函式會呼叫 ...
iOS Runtime實現weak屬性
weak的特點 同assign一樣,是一種非持有關係,不同在於當屬性所指物件被釋放後,屬性值也會自動清空。ps assign 可以用非 oc 物件,而 weak 必須用於 oc 物件 如何實現?當你初始化乙個weak變數的時候,runtime會呼叫objc initweak id object,id...
Weak 原理 個人學習總結
weak簡單來說是乙個雜湊表,key為修飾物件的位址,value為指向該位址的指標陣列。weak是由runtime初始化並維護的乙個weak表。在runtime的原始碼中由乙個objc weak檔案中進行定義了weak表的結構體及相關的方法。其中結構體中定義可乙個table weak t的乙個wea...