IOS 開發 weak內部原理

2021-08-27 11:04:09 字數 369 閱讀 5156

weak表其實是乙個hash(雜湊)表,key是所指物件的位址,value是weak指標的位址陣列。

weak 的實現原理可以概括一下三步:

1、初始化時:runtime會呼叫objc_initweak函式,初始化乙個新的weak指標指向物件的位址。

2、新增引用時:objc_initweak函式會呼叫 objc_storeweak() 函式, objc_storeweak() 的作用是更新指標指向,建立對應的弱引用表。

3、釋放時,呼叫cleardeallocating函式。cleardeallocating函式首先根據物件位址獲取所有weak指標位址的陣列,然後遍歷這個陣列把其中的資料設為nil,最後把這個entry從weak表中刪除,最後清理物件的記錄。

weak的實現原理

實現 weak weak 的作用 weak關鍵字的作用弱引用,所引用物件的計數器不會加一,並在引用物件被釋放的時候自動被設定為nil。如何實現 weak 整個系統中存在很多個物件,這些物件都可能會被弱引用,那麼我們需要乙個容器來容納這些被弱引用的物件,比如陣列,在此將這個容器的資料結構標識為obje...

iOS中ARC內部原理

你已經知道,arc會自動幫你插入retain和release語句。arc編譯器有兩部分,分別是前端編譯器和優化器。前端編譯器會為 擁有的 每乙個物件插入相應的release語句。如果物件的所有權修飾符是 strong,那麼它就是被擁有的。如果在某個方法內建立了乙個物件,前端編譯器會在方法末尾自動插入...

iOS中ARC內部原理

你已經知道,arc會自動幫你插入retain和release語句。arc編譯器有兩部分,分別是前端編譯器和優化器。前端編譯器會為 擁有的 每乙個物件插入相應的release語句。如果物件的所有權修飾符是 strong,那麼它就是被擁有的。如果在某個方法內建立了乙個物件,前端編譯器會在方法末尾自動插入...