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ì)大家有所幫助。