RAC是什么?
RAC — ReactiveCocoa(RAC)? Github 一個(gè)開源框架!!
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)注噢
開始擼代碼
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)沒有 self.next 中的 next 就是我們第二步訂閱者RACSubscriber保存的next,也就是實(shí)現(xiàn)next活尊。
至此隶校,RACSignal的底層實(shí)現(xiàn)原理已經(jīng)十分清楚了漏益。希望對(duì)大家有所幫助。