ReactiveCocoa & MVVM學(xué)習(xí)筆記

網(wǎng)上關(guān)于RAC和MVVM的資料非常多筋岛,我寫這篇主要是因?yàn)槌鯇W(xué)RAC,為自己記個(gè)學(xué)習(xí)筆記告抄。

1. RAC是什么痒玩?

(1) ReactiveCocoa(簡(jiǎn)稱RAC)是github開源的一款cocoa FRP框架。FRP通過信號(hào)記錄值的變化搂妻,信號(hào)可以被疊加蒙保、分割或合并,通過對(duì)信號(hào)的組合欲主,就不需要去監(jiān)聽某個(gè)值的變化或事件的發(fā)生邓厕。
(2) RAC主要有兩個(gè)作用:1)RAC的信號(hào)機(jī)制可以將ViewModel與View相關(guān)聯(lián)逝嚎,這樣View的變化可以直接響應(yīng)ViewModel層的變化。2)統(tǒng)一消息傳遞機(jī)制详恼。iOS中消息傳遞機(jī)制有很多:delegate补君、notification、KVO昧互、block挽铁、target-action等,使用時(shí)會(huì)不困惑選擇哪種方式最優(yōu)敞掘,RAC通過增加category的方式將傳統(tǒng)的UI控件事件進(jìn)行了封裝叽掘,提供一個(gè)統(tǒng)一的接口,簡(jiǎn)化了消息傳遞機(jī)制玖雁。用ARC來完成消息傳遞機(jī)制代碼實(shí)現(xiàn):

// KVO
[RACObserve(self, text) subscribeNext:^(id text) {
     NSLog(@" 成員變量 text 被修改成了:%@", text);
}];
// target-action
self.button.rac_command = [[RACCommand alloc] initWithSignalBlock:^RACSignal *(id input) {
  NSLog(@" 按鈕被點(diǎn)擊 ");
}];
// Notification
[[[NSNotificationCenter defaultCenter] 
rac_addObserverForName:notificationName         
                object:nil] 
subscribeNext:^(id x) {
    NSLog(@" 收到通知notificationName ");
}
];
// Delegate
[[self rac_signalForSelector:@selector(viewWillAppear:)] subscribeNext:^(id x) {
debugLog(@"viewWillAppear 方法被調(diào)用 %@", x);
}];

(3) 信號(hào)是指一個(gè)發(fā)送一連串值(event)的object更扁,當(dāng)有subscriber監(jiān)聽時(shí),signal才會(huì)發(fā)送消息赫冬。

2. RAC中的熱信號(hào)與冷信號(hào)

1)各自特點(diǎn):熱信號(hào)類似“直播”浓镜,錯(cuò)過了就不再處理(不會(huì)收到訂閱之前的數(shù)據(jù))。而冷信號(hào)類似“點(diǎn)播”面殖,每次訂閱都會(huì)從頭開始竖哩。
2)RAC4中的signalProducer對(duì)應(yīng)RAC2中的RACSignal是冷信號(hào);RAC4中的signal對(duì)應(yīng)RAC2中的RACSubject是熱信號(hào)脊僚。
3)如果冷信號(hào)中包含網(wǎng)絡(luò)請(qǐng)求相叁,那么每次訂閱這個(gè)冷信號(hào)都會(huì)發(fā)送網(wǎng)絡(luò)請(qǐng)求,而且任何的信號(hào)轉(zhuǎn)換即是對(duì)原有的信號(hào)進(jìn)行訂閱從而產(chǎn)生新的信號(hào)辽幌。這將對(duì)用戶流量增淹、服務(wù)器負(fù)載造成不好的影響。因此要區(qū)分冷熱信號(hào)乌企。
4)上述問題的解決方法就是將冷信號(hào)轉(zhuǎn)換成特殊的熱信號(hào)虑润。在RAC4中,我們使用SignalProducer.buffer(Int)這個(gè)方法來代替RACReplaySubject加酵,這樣即使訂閱者在信號(hào)發(fā)送事件之后訂閱拳喻,也可以收到信號(hào)發(fā)送的所有事件,就像所有的事件緩存起來一樣猪腕,這里就像冷信號(hào)一樣冗澈,同時(shí)又不會(huì)有副作用。

3. MVVM:MVC的增強(qiáng)版

構(gòu)造ViewModel陋葡,主要是 ViewController 給 View 傳遞數(shù)據(jù)的這個(gè)過程亚亲,抽象成構(gòu)造 ViewModel 的過程。這樣抽象后,View只接收ViewModel捌归,而Controller只需要傳遞ViewModel肛响,簡(jiǎn)化了Controller文件,也更加容易測(cè)試惜索。

ps:感覺RAC的學(xué)習(xí)任重道遠(yuǎn)特笋,需要學(xué)習(xí)的東西好多,慢慢學(xué)吧···

4. 附參考博客地址:

  1. 細(xì)說ReactiveCocoa的冷信號(hào)與熱信號(hào)(一)
  2. 細(xì)說ReactiveCocoa的冷信號(hào)與熱信號(hào)(二):為什么要區(qū)分冷熱信號(hào)
  3. 細(xì)說ReactiveCocoa的冷信號(hào)與熱信號(hào)(三):怎么處理冷信號(hào)與熱信號(hào)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末门扇,一起剝皮案震驚了整個(gè)濱河市雹有,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌臼寄,老刑警劉巖霸奕,帶你破解...
    沈念sama閱讀 216,651評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異吉拳,居然都是意外死亡质帅,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,468評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門留攒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來煤惩,“玉大人,你說我怎么就攤上這事炼邀∑侨啵” “怎么了?”我有些...
    開封第一講書人閱讀 162,931評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵拭宁,是天一觀的道長(zhǎng)洛退。 經(jīng)常有香客問我,道長(zhǎng)杰标,這世上最難降的妖魔是什么兵怯? 我笑而不...
    開封第一講書人閱讀 58,218評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮腔剂,結(jié)果婚禮上媒区,老公的妹妹穿的比我還像新娘。我一直安慰自己掸犬,他們只是感情好袜漩,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,234評(píng)論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著湾碎,像睡著了一般宙攻。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上胜茧,一...
    開封第一講書人閱讀 51,198評(píng)論 1 299
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼呻顽。 笑死雹顺,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的廊遍。 我是一名探鬼主播嬉愧,決...
    沈念sama閱讀 40,084評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼喉前!你這毒婦竟也來了没酣?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,926評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤卵迂,失蹤者是張志新(化名)和其女友劉穎裕便,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體见咒,經(jīng)...
    沈念sama閱讀 45,341評(píng)論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡偿衰,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,563評(píng)論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了改览。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片下翎。...
    茶點(diǎn)故事閱讀 39,731評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖宝当,靈堂內(nèi)的尸體忽然破棺而出视事,到底是詐尸還是另有隱情,我是刑警寧澤庆揩,帶...
    沈念sama閱讀 35,430評(píng)論 5 343
  • 正文 年R本政府宣布俐东,位于F島的核電站,受9級(jí)特大地震影響盾鳞,放射性物質(zhì)發(fā)生泄漏犬性。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,036評(píng)論 3 326
  • 文/蒙蒙 一腾仅、第九天 我趴在偏房一處隱蔽的房頂上張望乒裆。 院中可真熱鬧,春花似錦推励、人聲如沸鹤耍。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,676評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽稿黄。三九已至,卻和暖如春跌造,著一層夾襖步出監(jiān)牢的瞬間杆怕,已是汗流浹背族购。 一陣腳步聲響...
    開封第一講書人閱讀 32,829評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留陵珍,地道東北人寝杖。 一個(gè)月前我還...
    沈念sama閱讀 47,743評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像互纯,于是被迫代替她去往敵國(guó)和親瑟幕。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,629評(píng)論 2 354

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