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是怎麼工作的?之前學...