Runloop應(yīng)用: Timer失效問題; 線程保活; Runloop的運行邏輯: 入口函數(shù) 通知Observers:進入Loop; 通知Observers:即將處理Time...
Runloop應(yīng)用: Timer失效問題; 線程保活; Runloop的運行邏輯: 入口函數(shù) 通知Observers:進入Loop; 通知Observers:即將處理Time...
objc_msgSend()實現(xiàn) 3. 消息轉(zhuǎn)發(fā):__forwarding__ 這個階段代碼沒有開源,這里有一份國外整理的偽代碼(提取碼: du9w). 以下方法都有實例方法...
傳送門: Runtime的幾個常規(guī)應(yīng)用 類相關(guān): 動態(tài)創(chuàng)建一個類(參數(shù):父類,類名,額外的內(nèi)存空間) Class objc_allocateClassPair(Class s...
場景如下: 當(dāng)離開作用域時,person對象銷毀,所以“1”號線消失; “2”、“3”因為是強引用,所以相互持有,對方都不會得到釋放。 解決: RAC 環(huán)境下: __weak...
方法: - (void)setValue:(id)value forKeyPath:(NSString *)keyPath;- (void)setValue:(id)valu...
KVO的本質(zhì): 本質(zhì)是重寫set方法。 1、利用Runtime API 動態(tài)生成一個全新的子類,并且讓instance對象的isa指向這個全新的子類;2、當(dāng)修改instanc...
Category的原理 Category編譯之后的底層結(jié)構(gòu)是struct category_t,里面存儲著分類的對象方法、類方法、屬性、協(xié)議信息; 在程序運行的時候,runt...
+initialize方法會在類第一次接收到消息時調(diào)用; 調(diào)用順序: 先調(diào)用父類的+initialize,再調(diào)用子類的。(先初始化父類,再初始化子類,每個類只會初始化1次。)...