序
第一次接觸RAC是去年宴抚,差不多也是這個時候荸恕,當時就想總結(jié)一篇文章辟狈,但是當把用法全盤的了解一下之后心生感慨强霎。
什么玩意鸯两,這不就是一個厚重版的blockskit么坏瞄?
至于MVVM,網(wǎng)上的各種文章不斷的在強調(diào)甩卓,什么冗余的Controller、遺失的網(wǎng)絡(luò)邏輯蕉斜,那你把網(wǎng)絡(luò)請求單獨的抽成一個類不就行了么逾柿?
后來各種原因吧,加上無意中看到兩篇文章宅此,讓我感觸良多机错,懷著崇敬的心情重讀RAC。至于RAC+MVVM這種組合框架父腕,我現(xiàn)在的態(tài)度是:你可以不用弱匪,但是不能不會。
目錄
- 引入面試題
- 類名描述
- 信號的生命周期及源碼解讀
- RACCommand
一萧诫、面試題
面試官:為什么發(fā)送完要調(diào)用 [subscriber sendCompleted]
二、RAC常用類
類名 | 描述 |
---|---|
RACSignal | 信號類(核心類) |
RACSubject | 可充當信號枝嘶,又能發(fā)送信號 |
RACSubscriber | 信號訂閱者 (協(xié)議) |
RACReplaySubject | 重復(fù)提供信號類(繼承子RACSubject) |
RACMulticastConnection | 避免被多次訂閱 |
RACDisposable | 取消訂閱 |
RACCompoundDisposable | 類似于可變數(shù)組 |
RACCommand | RAC中用于處理事件的類 |
三帘饶、信號的生命周期及源碼解讀
3.1、創(chuàng)建信號
本質(zhì):實例化RACDynamicSignal類型的信號群扶,并將傳入的block保存
3.2及刻、訂閱信號
本質(zhì):創(chuàng)建訂閱者,保存相應(yīng)block(等待發(fā)送時調(diào)用block)
3.3竞阐、發(fā)送信號
本質(zhì) : 執(zhí)行訂閱信號時傳入的block
關(guān)于以上先將block拷貝缴饭,在《Effective Objective-C 2.0》中有這樣一段介紹:
block--copy.png
所以我們以后在用block的時候,最好也先copy一下骆莹。
3.4颗搂、取消訂閱
本質(zhì):把訂閱信號獲得的disposable進行dispost即可,在調(diào)度器調(diào)度該部分代碼之前禁止調(diào)用
3.5汪疮、其他信號類
四峭火、RACCommand
將這個類單獨弄寫一下是因為它比較重要,MVVM對于MVC來說最大的不同點就是把網(wǎng)絡(luò)請求抽離到ViewModel中了
4.1智嚷、RACCommand創(chuàng)建命令
本質(zhì):創(chuàng)建了一個RACCommand類的對象卖丸,保存block,初始化了一個信號數(shù)組盏道,用來接收信號命令
4.2稍浆、RACCommand-訂閱命令發(fā)出信號
本質(zhì):訂閱保存到信號數(shù)組中的最新信號
4.3、RACCommand-判斷命令是否在執(zhí)行
本質(zhì):檢測是否有活躍的信號
4.4、RACCommand-執(zhí)行命令
本質(zhì):將傳入的小對象傳入signalBlock生成signal衅枫,并將signal添加到_activeExecutionSignals信號數(shù)組中
4.5嫁艇、RACCommand在實際中的應(yīng)用
常見使用場景:網(wǎng)絡(luò)請求
這里我從網(wǎng)上扒了一個demo,具體實現(xiàn)如下
五弦撩、RACSubject
5.1步咪、RACSubject解讀
5.2、RACSubject的實際應(yīng)用
通常在RAC+MVVM架構(gòu)的項目中益楼,一般用RACSubject來代替代理猾漫。
演示:
自定義一個名字為DelegateView的UIView,在內(nèi)部添加了一個button感凤,通過點擊button回調(diào)悯周。
以前我們通常會使用代理、block陪竿、通知等來實現(xiàn)這一步驟禽翼,現(xiàn)在我們用RACSubject來代替一下。
END
原來讀源碼真的會上癮族跛,如果感覺對您有幫助闰挡,請動動手指點贊一下