iOS中weak的實現原理

runtime維護了一個weak表,用於存儲指向某個對象的所有weak指針。weak表其實是一個hash(哈希)表,key是所指對象的地址,Value是weak指針的地址(這個地址的值是所指對象指針的地址)數組。

步驟:

  1. 初始化時:runtime會調用objc_initWeak函數,初始化一個新的weak指針指向對象的地址。
  2. 添加引用時:objc_initWeak函數會調用 storeWeak() 函數, storeWeak() 的作用是更新指針指向,創建對應的弱引用表。
  3. 釋放時,調用clearDeallocating函數。clearDeallocating函數首先根據對象地址獲取所有weak指針地址的數組,然後遍歷這個數組把其中的數據設爲nil,最後把這個entry從weak表中刪除,最後清理對象的記錄。

具體參考:這裏

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章