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,屬於動態呼叫,只有在真正執行才會根據函式名稱找到對應...