初識(shí)RACSignal、RACDisposable及RACSignal底層實(shí)現(xiàn)

RAC是什么?

RAC — ReactiveCocoa(RAC)? Github 一個(gè)開(kāi)源框架!!

RAC — 函數(shù)響應(yīng)編程框架!!

RAC有什么用?

幫助我們更簡(jiǎn)單霸氣的處理事件!!

這里我們導(dǎo)入的是OC版本:pod 'ReactiveObjC','~>3.0.0'


RACSignal :信號(hào)類!

通過(guò)RACSignal創(chuàng)建一個(gè)信號(hào)!! (默認(rèn)是: 冷信號(hào)!!)

通過(guò)訂閱者!訂閱這個(gè)信號(hào)!(變成: 熱信號(hào)!!)

發(fā)送信號(hào)!!

RACDisposable:

它可以幫助我們?nèi)∠嗛? 默認(rèn)一個(gè)信號(hào)發(fā)送數(shù)據(jù)完畢就會(huì)主動(dòng)取消訂閱.


會(huì)不定期更新,喜歡的小伙伴多多關(guān)注噢

開(kāi)始擼代碼

1、新建Xcode工程,導(dǎo)入pod 'ReactiveObjC','~>3.0.0'

2、在需要地方導(dǎo)入#import <ReactiveObjC.h>,當(dāng)然可以定義一個(gè)pch文件導(dǎo)進(jìn)去

3、具體代碼看截圖



代碼解析:

截圖中第41行代碼有一個(gè)RACDisposable類型返回值,RACDisposable主要用于取消訂閱;每當(dāng)一個(gè)信號(hào)發(fā)送數(shù)據(jù)完畢就會(huì)主動(dòng)取消訂閱;但是我們有時(shí)候發(fā)送完數(shù)據(jù)后不想要取消訂閱,就定義一個(gè)屬性(截圖第18行)強(qiáng)引用subscriber,這樣發(fā)送信號(hào)之后就不會(huì)默認(rèn)取消訂閱,我們就可以手動(dòng)取消訂閱了。



RACSignal底層實(shí)現(xiàn)


1、截圖第30行創(chuàng)建信號(hào)類,是一個(gè)RACDynamicSignal(RACSignal的子類)類型的信號(hào)類,在創(chuàng)建方法中,將傳入的block存儲(chǔ)起來(lái)(signal->_didSubscribe = [didSubscribe copy])

2、訂閱信號(hào)時(shí)候,內(nèi)部首先創(chuàng)建訂閱者RACSubscriber(就是下面截圖中的o),同時(shí)訂閱者RACSubscriber將傳入的next進(jìn)行保存;注意 return [self subscribe:o]中的self是RACDynamicSignal類型,進(jìn)入[self subscribe:o],可以看到執(zhí)行了didSubscribe,這個(gè)didSubscribe就是我們創(chuàng)建信號(hào)時(shí)候傳入的block,就是第一張截圖中的subscribe。


3、執(zhí)行didSubscribe,就是第一張截圖第32行,點(diǎn)擊進(jìn)去發(fā)現(xiàn)執(zhí)行的是nextBlock(value),發(fā)現(xiàn)沒(méi)有 self.next 中的 next 就是我們第二步訂閱者RACSubscriber保存的next,也就是實(shí)現(xiàn)next。



至此,RACSignal的底層實(shí)現(xiàn)原理已經(jīng)十分清楚了。希望對(duì)大家有所幫助。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容