你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發基礎 >> ReactiveCocoa 理解筆記

ReactiveCocoa 理解筆記

編輯:IOS開發基礎

pexels-photo-medium (1).jpg

該文章適合有一定iOS開發基礎的伙伴,如果你是一位iOS新手,那麼該文章現在不適合你,可以先收藏,以後再消化。

什麼是ReactiveCocoa?

ReactiveCocoa(其簡稱為RAC)是由Github開源的一個應用於iOS和OS X開發的新框架。RAC具有函數式編程和響應式編程的特性。它主要吸取了.Net的 Reactive Extensions的設計和實現。

ReactiveCocoa結合了幾種編程風格:
函數式編程(Functional Programming):使用高階函數,例如函數用其他函數作為參數。
響應式編程(Reactive Programming):關注於數據流和變化傳播。
所以,你可能聽說過ReactiveCocoa被描述為函數響應式編程(FRP)框架。編程范式是個很范的概念,不作為本篇的主題。

為何使用?

任何一個軟件工程師知道MVC,它意思是Model-View-Controller, 是項目開發中公認的代碼組織模式。 在 iOS 開發中它還有著第二種含義: Massive-View-Controller(重量級視圖控制器),它沒有指出網絡代碼、數據組織代碼所在的層次,導致Controller負責太多的事情,代碼變得臃腫復雜。每當碰到這類代碼需要需改的時候,程序員腦中都會想過重構、解耦代碼的想法,然而因為時間、風險等等原因,大家只能想想了。總的來說, 很多iOS 開發者已經意識到: 需要給視圖控制器(UiViewController)瘦身, 並進一步分離業務。
傳統MVC模式工程主要會出現2個問題:

  1. iOS開發過程中,狀態依賴(KVO)實現方式復雜,實用性較小

  2. UiViewController比較復雜,代碼耦合性較高

很多開發者都會遇到上面的問題,這時我們需要思考如何解決這類問題,尋找新的方案?

MVVM
於是MVVM流行起來, 它代表Model-View-ViewModel, 它主要解決Controller層復雜性高、耦合性高的問題,幫助我們重新組織工程代碼。我將要在這裡展示的 MVVM 的風格, 它跟 MVC 十分兼容,只要我們將 MVC中Controller層的代碼分開處理即可完成。

我不會抬高MVVM、貶低MVC, 因為他們各有優缺,不會相互取代,同時還可相互兼容。 MVVM模式也是我第一次使用,我將會關注如何用它進行 iOS開發。

MVVM的定義

  1. Model 在 MVVM 中沒有真正的變化。 取決於你的偏好, 你的 model 可能會或可能不會封裝一些額外的業務邏輯工作。我更傾向於把它當做一個容納表現數據-模型對象信息的結構體, 並在一個單獨的管理類中維護的創建/管理模型的統一邏輯。

  2. View包含實際 UI 本身(可以是 UIView 代碼, xib,storyboard), 可以包含視圖特定的邏輯, 或用戶操作的反饋。在 iOS 中這不僅需要 UIView 代碼和那些文件, 還包括部分UIViewController。

  3. View-Model 這個術語本身比較疑惑, 因為它混搭了前面兩個我們已知的術語, 但卻是完全不同的東西。 它不是傳統模型層和視圖層的結合,它的職責之一就是作為一個中間層連接模型層(Model);它還承擔收集、解析和轉換數據的責任。這將這留給了 view (controller) 一個更加清晰明確的任務:承載View層視圖,組織展示由 view-model 提供的數據。

blob.png

MVC

blob.png

MVVM

對比兩種模式,可以簡單的認為MVVM比MVC多了一個中間層View-Model ,可以理解為: 我們將Controller中的網絡請求代碼、數據管理代碼和部分業務代碼移動到了它擁有的View-Model 中。這樣UIViewController 就能夠專注的負責View的管理、界面流程跳轉。

盡管我們的代碼並有沒有減少,代碼層次增加了,但是Controller由臃腫變得簡潔,由復雜變得清晰。針對功能單一的層次代碼,我們易於理解,也方便進行單元測試。總的來說,MVVM模式更加適合iOS移動APP工程開發。

在下章,我將說明:

  1. MVVM和ReactiveCocoa的關系

  2. 為什麼要使用ReactiveCocoa

  3. ReactiveCocoa的基本用法

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved