iOS Runtime實現weak屬性

2021-10-06 05:37:31 字數 660 閱讀 7512

weak的特點: 同assign一樣,是一種非持有關係,不同在於當屬性所指物件被釋放後,屬性值也會自動清空。ps:assign 可以用非 oc 物件,而 weak 必須用於 oc 物件

如何實現?

當你初始化乙個weak變數的時候,runtime會呼叫objc_initweak(id * object, id value)

id __weak obj1 = obj;

objc_initweak(&obj1, obj);

objc_initweak-> objc_storeweak(object, value)

首先通過value去找它對應的弱引用表

newtable = sidetable::tableforpointer(value)
weak_table_t弱引用表記錄了這個物件的所有弱引用變數,weak_referrer_t陣列裡面儲存

struct weak_table_t ;

struct weak_entry_t ;

struct ;

};};

當這個物件被釋放的時候,會呼叫objec_clear_deallocating ,主要工作就是把這個物件的弱引用表找出來,找到所有的弱引用變數,清空這些變數。

IOS runtime簡單使用

一 runtime簡介 runtime簡稱執行時。oc就是執行時機制,也就是在執行時候的一些機制,其中最主要的是訊息機制。對於c語言,函式的呼叫在編譯的時候會決定呼叫哪個函式。對於oc的函式,屬於動態呼叫過程,在編譯的時候並不能決定真正呼叫哪個函式,只有在真正執行的時候才會根據函式的名稱找到對應的函...

iOS runtime,訊息傳送

objective c runtime ios執行時 runtime 詳解 demo ios 訊息傳送與 詳解 ios runtime 的使用場景 實戰篇 method swizzling oc 實現 ios runtime實戰應用 method swizzling method swizzling...

iOS Runtime基礎結構

runtime概念 oc是基於c的,區別於c的一點就是oc屬於動態語言,並且有物件導向的特性。相比於c,函式的呼叫在編譯的時候會決定呼叫哪個函式。oc會在編譯和鏈結時做的事情放到了執行時 runtime 來處理,其呼叫函式的方法為msg send,屬於動態呼叫,只有在真正執行才會根據函式名稱找到對應...