ReactiveCocoa 優(yōu)秀博客閱讀筆記

**推薦:ReactiveCocoa和MVVM專題,匯聚一些優(yōu)秀相關(guān)博客 **

為夢(mèng)想每天前行(與本文無(wú)關(guān))

ReactiveCocoa為事件定義了一個(gè)標(biāo)準(zhǔn)接口细办,從而可以使用一些基本工具來(lái)更容易的連接、過(guò)濾和組合咐扭。如果你對(duì)上面說(shuō)的還比較疑惑,那還是繼續(xù)往下看吧。

一 )函數(shù)響應(yīng)式編程名稱的由來(lái)

ReactiveCocoa結(jié)合了幾種編程風(fēng)格:

  • 函數(shù)式編程(Functional Programming):使用高階函數(shù),例如函數(shù)用其他函數(shù)作為參數(shù).
  • 響應(yīng)式編程(Reactive Programming):關(guān)注于數(shù)據(jù)流和變化傳播鹃觉。

所以,你可能聽說(shuō)過(guò)ReactiveCocoa被描述為函數(shù)響應(yīng)式編程(FRP)框架睹逃。

二 )ReactiveCocoa作用

在我們iOS開發(fā)過(guò)程中盗扇,當(dāng)某些事件響應(yīng)的時(shí)候,需要處理某些業(yè)務(wù)邏輯,這些事件都用不同的方式來(lái)處理唯卖。比如按鈕的點(diǎn)擊使用action粱玲,ScrollView滾動(dòng)使用delegate,屬性值改變使用KVO等系統(tǒng)提供的方式拜轨。其實(shí)這些事件抽减,都可以通過(guò)RAC處理ReactiveCocoa為事件提供了很多處理方法,而且利用RAC處理事件很方便橄碾,可以把要處理的事情卵沉,和監(jiān)聽的事情的代碼放在一起,這樣非常方便我們管理法牲,就不需要跳到對(duì)應(yīng)的方法里史汗。非常符合我們開發(fā)中高聚合,低耦合的思想拒垃。

三) 信號(hào)的邏輯圖

FRP_ReactiveCocoa_large.png

核心概念是RACSignal停撞,相當(dāng)于一個(gè)信號(hào)管道,接收信號(hào)源的信號(hào),將信號(hào)依次發(fā)送給

四 ) RAC 和MVVM 結(jié)合使用圖

MVVMReactiveCocoa.png

五 RAC 簡(jiǎn)單實(shí)用二十例

ReactiveCocoa簡(jiǎn)單使用20例 超級(jí)值得一看和嘗試

六 ) ReactiveCocoa常見(jiàn)類戈毒。

學(xué)習(xí)框架首要之處:個(gè)人認(rèn)為先要搞清楚框架中常用的類艰猬,在RAC中最核心的類RACSiganl,搞定這個(gè)類就能ReactiveCocoa開發(fā)了。

6.1RACSiganl

信號(hào)類,一般表示將來(lái)有數(shù)據(jù)傳遞埋市,只要有數(shù)據(jù)改變冠桃,信號(hào)內(nèi)部接收到數(shù)據(jù),就會(huì)馬上發(fā)出數(shù)據(jù)道宅。注意信號(hào)類(RACSiganl)食听,只是表示當(dāng)數(shù)據(jù)改變時(shí),信號(hào)內(nèi)部會(huì)發(fā)出數(shù)據(jù)污茵,它本身不具備發(fā)送信號(hào)的能力樱报,而是交給內(nèi)部一個(gè)訂閱者去發(fā)出。

默認(rèn)一個(gè)信號(hào)都是冷信號(hào)省咨,也就是值改變了肃弟,也不會(huì)觸發(fā),只有訂閱了這個(gè)信號(hào)零蓉,這個(gè)信號(hào)才會(huì)變?yōu)?strong>熱信號(hào)笤受,值改變了才會(huì)觸發(fā)。
如何訂閱信號(hào):調(diào)用信號(hào)RACSignal的subscribeNext就能訂閱敌蜂。

6.2RACSubscriber

:表示訂閱者的意思箩兽,用于發(fā)送信號(hào),這是一個(gè)協(xié)議章喉,不是一個(gè)類汗贫,只要遵守這個(gè)協(xié)議,并且實(shí)現(xiàn)方法才能成為訂閱者秸脱。通過(guò)create創(chuàng)建的信號(hào)落包,都有一個(gè)訂閱者,幫助他發(fā)送數(shù)據(jù)摊唇。

6.3RACDisposable

用于取消訂閱或者清理資源咐蝇,當(dāng)信號(hào)發(fā)送完成或者發(fā)送錯(cuò)誤的時(shí)候,就會(huì)自動(dòng)觸發(fā)它巷查。
使用場(chǎng)景
:不想監(jiān)聽某個(gè)信號(hào)時(shí)有序,可以通過(guò)它主動(dòng)取消訂閱信號(hào)。

6.4RACSubject

:RACSubject:信號(hào)提供者岛请,自己可以充當(dāng)信號(hào)旭寿,又能發(fā)送信號(hào)。

6.6RACTuple

元組類,類似NSArray,用來(lái)包裝值.

6.7RACSequence

:RAC中的集合類崇败,用于代替NSArray,NSDictionary,可以使用它來(lái)快速遍歷數(shù)組和字典盅称。

6.8RACCommand

RAC中用于處理事件的類,可以把事件如何處理,事件中的數(shù)據(jù)如何傳遞,包裝到這個(gè)類中缩膝,他可以很方便的監(jiān)控事件的執(zhí)行過(guò)程搭幻。

使用場(chǎng)景

監(jiān)聽按鈕點(diǎn)擊,網(wǎng)絡(luò)請(qǐng)求

6.9RACMulticastConnection

用于當(dāng)一個(gè)信號(hào)逞盆,被多次訂閱時(shí),為了保證創(chuàng)建信號(hào)時(shí)松申,避免多次調(diào)用創(chuàng)建信號(hào)中的block云芦,造成副作用,可以使用這個(gè)類處理贸桶。

6.10 RACScheduler

RAC中的隊(duì)列舅逸,用GCD封裝的。

6.11 RACUnit

表?stream不包含有意義的值,也就是看到這個(gè)皇筛,可以直接理解為nil.

6.12RACEvent

把數(shù)據(jù)包裝成信號(hào)事件(signal event)琉历。它主要通過(guò)RACSignal的-materialize來(lái)使用,然并卵水醋。

七).ReactiveCocoa開發(fā)中常見(jiàn)用法旗笔。

7.1 代替代理:

rac_signalForSelector 用于替代代理。

7.2 代替KVO :

rac_valuesAndChangesForKeyPath 用于監(jiān)聽某個(gè)對(duì)象的屬性改變拄踪。

7.3 監(jiān)聽事件:

rac_signalForControlEvents 用于監(jiān)聽某個(gè)事件蝇恶。

7.4 代替通知:

rac_addObserverForName 用于監(jiān)聽某個(gè)通知。

7.5 監(jiān)聽文本框文字改變:

rac_textSignal 只要文本框發(fā)出改變就會(huì)發(fā)出這個(gè)信號(hào)惶桐。

7.6 處理當(dāng)界面有多次請(qǐng)求時(shí)撮弧,需要都獲取到數(shù)據(jù)時(shí),才能展示界面

八).ReactiveCocoa常見(jiàn)宏姚糊。

8.1RAC

(TARGET, [KEYPATH, [NIL_VALUE]])用于給某個(gè)對(duì)象的某個(gè)屬性綁定贿衍。// 只要文本框文字改變,就會(huì)修改label的文字 RAC(self.labelView,text) = _textField.rac_textSignal;

8.2RACObserve(self, name)

:監(jiān)聽某個(gè)對(duì)象的某個(gè)屬性,返回的是信號(hào)救恨。
[RACObserve(self.view, center) subscribeNext:^(id x) { NSLog(@"%@",x); }];

8.3@weakify(Obj)和@strongify(Obj)

,一般兩個(gè)都是配套使用,在主頭文件(ReactiveCocoa.h
)中并沒(méi)有導(dǎo)入贸辈,需要自己手動(dòng)導(dǎo)入,RACEXTScope.h
才可以使用忿薇。但是每次導(dǎo)入都非常麻煩裙椭,只需要在主頭文件自己導(dǎo)入就好了。

8.4RACTuplePack

:把數(shù)據(jù)包裝成RACTuple(元組類)
// 把參數(shù)中的數(shù)據(jù)包裝成元組 RACTuple *tuple = RACTuplePack(@10,@20);

8.5RACTupleUnpack

:把RACTuple(元組類)解包成對(duì)應(yīng)的數(shù)據(jù)署浩。
// 把參數(shù)中的數(shù)據(jù)包裝成元組 RACTuple *tuple = RACTuplePack(@"xmg",@20); // 解包元組揉燃,會(huì)把元組的值,按順序給參數(shù)里面的變量賦值 // name = @"xmg" age = @20 RACTupleUnpack(NSString *name,NSNumber *age) = tuple;

參考資料
ReactiveCocoa之基礎(chǔ)篇
ReactiveCocoa之進(jìn)階篇
函數(shù)響應(yīng)式編程


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末炊汤,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌抢腐,老刑警劉巖姑曙,帶你破解...
    沈念sama閱讀 222,627評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異迈倍,居然都是意外死亡伤靠,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,180評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門啼染,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)宴合,“玉大人,你說(shuō)我怎么就攤上這事迹鹅∝郧ⅲ” “怎么了?”我有些...
    開封第一講書人閱讀 169,346評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵斜棚,是天一觀的道長(zhǎng)阀蒂。 經(jīng)常有香客問(wèn)我,道長(zhǎng)弟蚀,這世上最難降的妖魔是什么蚤霞? 我笑而不...
    開封第一講書人閱讀 60,097評(píng)論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮义钉,結(jié)果婚禮上争便,老公的妹妹穿的比我還像新娘。我一直安慰自己断医,他們只是感情好滞乙,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,100評(píng)論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著鉴嗤,像睡著了一般斩启。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上醉锅,一...
    開封第一講書人閱讀 52,696評(píng)論 1 312
  • 那天兔簇,我揣著相機(jī)與錄音,去河邊找鬼硬耍。 笑死垄琐,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的经柴。 我是一名探鬼主播狸窘,決...
    沈念sama閱讀 41,165評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼坯认!你這毒婦竟也來(lái)了翻擒?” 一聲冷哼從身側(cè)響起氓涣,我...
    開封第一講書人閱讀 40,108評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎陋气,沒(méi)想到半個(gè)月后劳吠,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,646評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡巩趁,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,709評(píng)論 3 342
  • 正文 我和宋清朗相戀三年痒玩,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片议慰。...
    茶點(diǎn)故事閱讀 40,861評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡凰荚,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出褒脯,到底是詐尸還是另有隱情,我是刑警寧澤缆毁,帶...
    沈念sama閱讀 36,527評(píng)論 5 351
  • 正文 年R本政府宣布番川,位于F島的核電站,受9級(jí)特大地震影響脊框,放射性物質(zhì)發(fā)生泄漏颁督。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,196評(píng)論 3 336
  • 文/蒙蒙 一浇雹、第九天 我趴在偏房一處隱蔽的房頂上張望沉御。 院中可真熱鬧,春花似錦昭灵、人聲如沸吠裆。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,698評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)试疙。三九已至,卻和暖如春抠蚣,著一層夾襖步出監(jiān)牢的瞬間祝旷,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,804評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工嘶窄, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留怀跛,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,287評(píng)論 3 379
  • 正文 我出身青樓柄冲,卻偏偏與公主長(zhǎng)得像吻谋,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子现横,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,860評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容