原文連結
本文介紹的是史上最牛叉的ios開發新架構之一,最大的特點就是:直覺和靈活。直覺的代碼容易編寫、閱讀和維護,靈活的特性便于應對變态的需求,當然最重要的還是高效。各路大神(陽神,喵神,唐神等等)都不吝啬對它的贊美之詞,而且該架構已被美團等廣泛使用,好用的不要不要的..。本文主要介紹本人在學習ReactiveCocoa的時候的學習過程以及對一些學習資料的總結,歡迎大家批評發炎。閑話不多吹下面進入正題。
什麼是ReactiveCocoa?
ReactiveCocoa(其簡稱為RAC)是由Github 開源的一個應用于iOS和OS X開發的新架構。RAC具有函數式程式設計和響應式程式設計的特性。
是在iOS平台上對FRP的實作。FRP的核心是信号,信号在ReactiveCocoa(以下簡稱RAC)中是通過RACSignal來表示的,信号是資料流,可以被綁定和傳遞。它主要吸取了.Net的 Reactive Extensions的設計和實作。
大神leezhong在部落格中提到的比喻,可以更好地幫我們了解ReactiveCocoa.
可以把信号想象成水龍頭,隻不過裡面不是水,而是玻璃球(value),直徑跟水管的内徑一樣,這樣就能保證玻璃球是依次排列,不會出現并排的情況(資料都是線性處理的,不會出現并發情況)。水龍頭的開關預設是關的,除非有了接收方(subscriber),才會打開。這樣隻要有新的玻璃球進來,就會自動傳送給接收方。可以在水龍頭上加一個過濾嘴(filter),不符合的不讓通過,也可以加一個改動裝置,把球改變成符合自己的需求(map)。也可以把多個水龍頭合并成一個新的水龍頭(combineLatest:reduce:),這樣隻要其中的一個水龍頭有玻璃球出來,這個新合并的水龍頭就會得到這個球。
為什麼要用ReactiveCocoa
Native app有很大一部分的時間是在等待事件發生,然後響應事件,比如等待網絡請求完成,等待使用者的操作,等待某些狀态值的改變等等,等這些事件發生後,再做進一步處理。 但是這些等待和響應,并沒有一個統一的處理方式。Delegate, Notification, Block, KVO, 常常會不知道該用哪個最合适。有時需要chain或者compose某幾個事件,就需要多個狀态變量,而狀态變量一多,複雜度也就上來了。為了解決這些問題,Github的工程師們開發了ReactiveCocoa。
其實用簡單的一句話來說就是: RAC統一了對KVO、UI Event、Network request、Async work的處理,因為它們本質上都是值的變化(Values over time)。
ReactiveCocoa試圖解決什麼問題呢
大神唐巧在他部落格中這樣寫道主要解決三個問題:
1.傳統iOS開發過程中,狀态以及狀态之間依賴過多的問題。
2.傳統MVC架構的問題:Controller比較複雜,可測試性差
3.提供統一的消息傳遞機制
詳情請檢視大神博文在此就不再贅述
那麼問題來了?如何學習ReactiveCocoa呢
網上教程很多,本人隻是做了一下總結,又初級到進階所需要看的一些文章。
初級 教程
對一個新手來說需要掌握最基本的API的使用。必看的一篇文章是RayWenderlich 網站提供的系列教程,其詳細程度非常牛逼。當然國内大神們早就對該教程進行翻譯了 小夥伴們輕松了!!
第一部分位址:ReactiveCocoa入門教程——第一部分
第一部分位址:ReactiveCocoa入門教程——第一部分
進階教程
進階教程主要是進一步分析架構的結構以及實作原理。
參考資料:
1.ReactiveCocoa github上的readme的中文翻譯
2.介紹ReactiveCocoa架構的每個元件的文章,對熟悉ReactiveCocoa API非常有幫助
3.美團網官方部落格之RACSignal的Subscription深入分析
4.cocoaChina文章-Reactive Cocoa詳解
5.cocoaChina文章-ReactiveCocoa2實戰
6.cocoaChina文章-說說ReactiveCocoa 2
7.NSHipster上的文章-ReactiveCocoa
8.國外牛人的一篇文章-Data-Driven iOS Development with ReactiveCocoa
9.國外牛人的一篇文章-Getting Started with ReactiveCocoa
10.NSHipster上一篇關于Recative cocoa的介紹-ReactiveCocoa
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》
視訊
ReactiveCocoa at MobiDevDay 2013視訊