畢業到現在已經兩年多了,時間就像手中的沙子,無論你是攤開還是握緊,它總會從指間流逝!
? ? ? 兩年多的工作經驗,從最初寫代碼什么東西都往控制器里寫導致一個稍微大點的項目里隨處可見容納上千行代碼的控制器,到為了提高運行效率而使用的MVC框架,再到如今的MVVM框架。一路走來不知道踩了多少的坑坑洼洼,但是我很慶幸自己堅持下來了。
? ? ?說起代碼質量,我覺得很對不住上一家的公司,公司只有我一個iOS從去年中旬開始的兩個項目,整體的框架是照著最普通的來的,基本一多半是用的MVC,因為是我自己做項目所以很多弊端出來了,沒有一個整體的規范,自己想到哪里寫到哪里,兩個項目在大半年的時間里不停的添加功能,以至于后期我自己去維護都有點難以下手,超過千行的控制器比比皆是,那兩個項目用的三方框架很多,很多三方不能達到我想要的效果所以當時直接去改的人家的源碼(環信是其中之一,改過的環信已經不能叫環信了叫亂信也不為過)。對于三方框架小改可以大改的話還是用runtime去修改比較好,關于runtime也研究過很長一段時間,等有時間了再來聊聊怎么把runtime學以致用來改善代碼質量。
? ? ? ReactiveCocoa,是由Github開源的一個應用于iOS和OS開發的新框架,網上有很多介紹它的文章,個人覺得最快讓你上手ReactiveCocoa之基礎篇?這篇作為入門很不錯,這里我就不介紹它的使用方法了,貼上今天剛寫的一個小程序
ReactiveCocoa一般情況下多與MVVM結合使用,它倆結合寫出的代碼層次分明,我們常用的很多軟件都是采用這種框架實現的,比如網易新聞客戶端
這是demo的整體架構 寫之前先用cocoaPods 導入reactiveCocoa框架,導入方式很簡單網上有很多教程。作為MVVM必不可少的幾個必然是 View(DataView) ? ?Model(DataModel) ? ?ViewModel(DataViewModel) ? ?Controller(ViewController) ?
上面的Bar是我為了好寫下載的動畫 而用貝塞爾曲線寫的圖片下方的條狀圖
DataViewModel 里用來存放數據處理的,你的項目的一切網絡請求都可以放在這里
在.h里先定義一個 RACCommand 實例 在定義一個 用來存放請求到的數據的數組
.m的實現 在這個實例的SingnalBlock初始化方法內部進行數據請求操作
DataModel里主要是一個類方法來設置屬性值
DataView用來做視圖類的處理
在主控制器中只有少量的代碼
[[self.dataViewModel.fetchDataInfoCommand execute:nil] subscribeNext:^(id x) {
// 這里x 就是dataViewModel里返回的裝有數據的數組了
}completed:^{
}] ;
之后再把數據通過DataView的實例方法傳到dataView中進行顯示
通過循環的方式顯示 這里enumerateObjectsUsingBlock 類似for in 但是比for in效率高一些
這些只是寫這個小demo的隨筆,我當前公司做的項目整體用也是Reactivecocoa+ MVVM框架,以后會慢慢多寫點它的用法,這里只是冰山一角。
另外目前在學習Python中,會在簡書中記錄自己學習的點點滴滴