天天看點

ReactiveCocoa 學習之路(史上最全攻略)

原文連結

本文介紹的是史上最牛叉的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上的文章-Reactive​Cocoa

  8.國外牛人的一篇文章-Data-Driven iOS Development with ReactiveCocoa

  9.國外牛人的一篇文章-Getting Started with ReactiveCocoa

  10.NSHipster上一篇關于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》

視訊

  ReactiveCocoa at MobiDevDay 2013視訊