weak介紹

weakruntime維護的一個hash表,用于存儲指向某一個對象的所有指針。weak表其實是一個hash表,key是所指對象的指針,valueweak指針的地址(這個地址的值是所指對象指針的地址)數(shù)組。

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

runtime如何實現(xiàn)weak變量的自動置nil?

runtime對注冊的類,會進行布局,對于weak對象會放入一個hash表中,用weak所指向的對象內存地址作為key,當此對象的引用計數(shù)為0的時候會dealloc,假如weak指向的對象內存地址是a,那么就會以a為鍵,在這個weak表中搜索,找到所有以a為鍵的weak對象,從而設置為nil。

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

相關閱讀更多精彩內容

友情鏈接更多精彩內容