ReactiveCocoa 學(xué)習(xí)之路之史上最全攻略
本文介紹的是史上最牛叉的ios開發(fā)新框架之一,最大的特點就是:直觀和靈活。直觀的代碼容易編寫、閱讀和維護,靈活的特性便于應(yīng)對變態(tài)的需求,當然最重要的還是高效。各路大神(陽神,喵神,唐神等等)都不吝嗇對它的贊美之詞,而且該框架已被美團等廣泛使用,好用的不要不要的..。本文主要介紹本人在學(xué)習(xí)ReactiveCocoa的時候的學(xué)習(xí)過程以及對一些學(xué)習(xí)資料的總結(jié),歡迎大家批評發(fā)炎。閑話不多吹下面進入正題。
什么是ReactiveCocoa?
ReactiveCocoa(其簡稱為RAC)是由Github 開源的一個應(yīng)用于iOS和OS X開發(fā)的新框架。RAC具有函數(shù)式編程和響應(yīng)式編程的特性。
是在iOS平臺上對FRP的實現(xiàn)。FRP的核心是信號,信號在ReactiveCocoa(以下簡稱RAC)中是通過RACSignal來表示的,信號是數(shù)據(jù)流,可以被綁定和傳遞。它主要吸取了.Net的 Reactive Extensions的設(shè)計和實現(xiàn)。
大神leezhong在博客中提到的比喻,可以更好地幫我們理解ReactiveCocoa.
可以把信號想象成水龍頭,只不過里面不是水,而是玻璃球(value),直徑跟水管的內(nèi)徑一樣,這樣就能保證玻璃球是依次排列,不會出現(xiàn)并排的情況(數(shù)據(jù)都是線性處理的,不會出現(xiàn)并發(fā)情況)。水龍頭的開關(guān)默認是關(guān)的,除非有了接收方(subscriber),才會打開。這樣只要有新的玻璃球進來,就會自動傳送給接收方。可以在水龍頭上加一個過濾嘴(filter),不符合的不讓通過,也可以加一個改動裝置,把球改變成符合自己的需求(map)。也可以把多個水龍頭合并成一個新的水龍頭(combineLatest:reduce:),這樣只要其中的一個水龍頭有玻璃球出來,這個新合并的水龍頭就會得到這個球。
為什么要用ReactiveCocoa
Native app有很大一部分的時間是在等待事件發(fā)生,然后響應(yīng)事件,比如等待網(wǎng)絡(luò)請求完成,等待用戶的操作,等待某些狀態(tài)值的改變等等,等這些事件發(fā)生后,再做進一步處理。 但是這些等待和響應(yīng),并沒有一個統(tǒng)一的處理方式。Delegate, Notification, Block, KVO, 常常會不知道該用哪個最合適。有時需要chain或者compose某幾個事件,就需要多個狀態(tài)變量,而狀態(tài)變量一多,復(fù)雜度也就上來了。為了解決這些問題,Github的工程師們開發(fā)了ReactiveCocoa。
其實用簡單的一句話來說就是: RAC統(tǒng)一了對KVO、UI Event、Network request、Async work的處理,因為它們本質(zhì)上都是值的變化(Values over time)。
ReactiveCocoa試圖解決什么問題呢
大神唐巧在他博客中這樣寫道主要解決三個問題:
1.傳統(tǒng)iOS開發(fā)過程中,狀態(tài)以及狀態(tài)之間依賴過多的問題。
2.傳統(tǒng)MVC架構(gòu)的問題:Controller比較復(fù)雜,可測試性差
3.提供統(tǒng)一的消息傳遞機制
詳情請查看大神博文在此就不再贅述
那么問題來了?如何學(xué)習(xí)ReactiveCocoa呢
網(wǎng)上教程很多,本人只是做了一下總結(jié),又初級到高級所需要看的一些文章。
初級 教程
對一個新手來說需要掌握最基本的API的使用。必看的一篇文章是RayWenderlich 網(wǎng)站提供的系列教程,其詳細程度非常牛逼。當然國內(nèi)大神們早就對該教程進行翻譯了 小伙伴們輕松了??!
第一部分地址:ReactiveCocoa入門教程——第一部分
第一部分地址:ReactiveCocoa入門教程——第一部分
進階教程
進階教程主要是進一步分析框架的結(jié)構(gòu)以及實現(xiàn)原理。
參考資料:
1.ReactiveCocoa github上的readme的中文翻譯
2.介紹ReactiveCocoa框架的每個組件的文章,對熟悉ReactiveCocoa API非常有幫助
3.美團網(wǎng)官方博客之RACSignal的Subscription深入分析
4.cocoaChina文章-Reactive Cocoa詳解
5.cocoaChina文章-ReactiveCocoa2實戰(zhàn)
6.cocoaChina文章-說說ReactiveCocoa 2
7.NSHipster上的文章-Reactive?Cocoa
8.國外牛人的一篇文章-Data-Driven iOS Development with ReactiveCocoa
9.國外牛人的一篇文章-Getting Started with ReactiveCocoa
10.NSHipster上一篇關(guān)于Recative cocoa的介紹-Reactive?Cocoa
11.cocoaChina文章-【長篇高能】ReactiveCocoa 和 MVVM 入門
12.ReactiveCocoa常用語法-這樣好用的ReactiveCocoa,根本停不下來
書籍
當然如果你比較豪,想買點書看看可以選擇這個--《Functional Reactive Programming on iOS》
源碼
1.使用ReactiveCocoa框架編寫的app源碼之《MVVM-IOS-Example》
2.使用ReactiveCocoa框架編寫的app源碼之《GroceryList》
3.使用ReactiveCocoa框架編寫的app源碼之《C-41》