從原始碼角度分析RACObserve的實現原理(一)

2021-07-17 02:06:39 字數 1264 閱讀 9526

racobserve是個巨集,racobserve(target, keypath)最終是執行[target_ rac_valuesforkeypath:@keypath(target, keypath) observer:self];。這就牽出nsobject (racpropertysubscribing)category。

nsobject (racpropertysubscribing)

- (racsignal *)rac_valuesforkeypath:(nsstring *)keypath observer:(__weak nsobject *)observer;內部呼叫了- (racsignal *)rac_valuesandchangesforkeypath:(nsstring *)keypath options:(nskeyvalueobservingoptions)options observer:(__weak nsobject *)observer。其中options引數為nskeyvalueobservingoptioninitial。所以racobserve建立的signal 會立即傳送被觀察者的初始值。

- (racsignal *)rac_valuesandchangesforkeypath:(nsstring *)keypath options:(nskeyvalueobservingoptions)options observer:(__weak nsobject *)observer中可以看出。如果target為nil,返回乙個空的signal。如果target或者observer將要被**,signal也將被終止。

rackvotrampoline

rackvotrampoline實現了delegate到block的轉變。它作為中間人,實現- (void)observevalueforkeypath:(nsstring *)keypath ofobject:(id)object change:(nsdictionary *)change context:(void *)context方法,然後通過block的方式把變化傳遞出去。rackvotrampoline中還用到了rackvoproxy

rackvoproxy

它將維護kvo中observer與context之間的對應關係,變化來臨時,查詢關係表,把變化傳遞給對應的observer,也是rackvotrampoline.

從原始碼角度分析基礎的Handler訊息機制

其實網上已經有很多寫的很好很優秀的文章了,我這裡就是想寫一篇來捋清思路,同時加深記憶。handler訊息機制主要還是有5個元件,handler looper message messagequeue threadlocal 首先還是要明白,我們要傳輸的message是什麼,裡面有什麼東西。publi...

從原始碼角度分析 React 生命週期

使用過 react 框架開發的人,對 react 生命週期一定不會陌生,對 componentwillmount componentdidmount shouldcomponentupdate 等生命週期的運用必定輕車熟路,但是除了這些常用的生命週期,你知道還有 getdefaultprops ge...

從原始碼角度來看UVM phase

說到uvm phase我們就知道是uvm乙個很重要的特性,從使用者角度來講,其實就是一些很簡單的應用規則,能夠極大地提公升編碼的效率,簡化 複雜度,提高debug的效率。至於應用可以參看zhangqiang大佬的第五章,這裡就不再贅述。本文就從原始碼的角度來看,uvm的phase是怎麼工作的?之前學...