畢業(yè)到現(xiàn)在已經(jīng)兩年多了,時間就像手中的沙子,無論你是攤開還是握緊,它總會從指間流逝!
? ? ? 兩年多的工作經(jīng)驗,從最初寫代碼什么東西都往控制器里寫導(dǎo)致一個稍微大點的項目里隨處可見容納上千行代碼的控制器,到為了提高運行效率而使用的MVC框架,再到如今的MVVM框架。一路走來不知道踩了多少的坑坑洼洼,但是我很慶幸自己堅持下來了。
? ? ?說起代碼質(zhì)量,我覺得很對不住上一家的公司,公司只有我一個iOS從去年中旬開始的兩個項目,整體的框架是照著最普通的來的,基本一多半是用的MVC,因為是我自己做項目所以很多弊端出來了,沒有一個整體的規(guī)范,自己想到哪里寫到哪里,兩個項目在大半年的時間里不停的添加功能,以至于后期我自己去維護(hù)都有點難以下手,超過千行的控制器比比皆是,那兩個項目用的三方框架很多,很多三方不能達(dá)到我想要的效果所以當(dāng)時直接去改的人家的源碼(環(huán)信是其中之一,改過的環(huán)信已經(jīng)不能叫環(huán)信了叫亂信也不為過)。對于三方框架小改可以大改的話還是用runtime去修改比較好,關(guān)于runtime也研究過很長一段時間,等有時間了再來聊聊怎么把runtime學(xué)以致用來改善代碼質(zhì)量。
? ? ? ReactiveCocoa,是由Github開源的一個應(yīng)用于iOS和OS開發(fā)的新框架,網(wǎng)上有很多介紹它的文章,個人覺得最快讓你上手ReactiveCocoa之基礎(chǔ)篇?這篇作為入門很不錯,這里我就不介紹它的使用方法了,貼上今天剛寫的一個小程序


ReactiveCocoa一般情況下多與MVVM結(jié)合使用,它倆結(jié)合寫出的代碼層次分明,我們常用的很多軟件都是采用這種框架實現(xiàn)的,比如網(wǎng)易新聞客戶端

這是demo的整體架構(gòu) 寫之前先用cocoaPods 導(dǎo)入reactiveCocoa框架,導(dǎo)入方式很簡單網(wǎng)上有很多教程。作為MVVM必不可少的幾個必然是 View(DataView) ? ?Model(DataModel) ? ?ViewModel(DataViewModel) ? ?Controller(ViewController) ?
上面的Bar是我為了好寫下載的動畫 而用貝塞爾曲線寫的圖片下方的條狀圖
DataViewModel 里用來存放數(shù)據(jù)處理的,你的項目的一切網(wǎng)絡(luò)請求都可以放在這里
在.h里先定義一個 RACCommand 實例 在定義一個 用來存放請求到的數(shù)據(jù)的數(shù)組

.m的實現(xiàn) 在這個實例的SingnalBlock初始化方法內(nèi)部進(jìn)行數(shù)據(jù)請求操作
DataModel里主要是一個類方法來設(shè)置屬性值

DataView用來做視圖類的處理

在主控制器中只有少量的代碼

[[self.dataViewModel.fetchDataInfoCommand execute:nil] subscribeNext:^(id x) {
// 這里x 就是dataViewModel里返回的裝有數(shù)據(jù)的數(shù)組了
}completed:^{
}] ;
之后再把數(shù)據(jù)通過DataView的實例方法傳到dataView中進(jìn)行顯示


通過循環(huán)的方式顯示 這里enumerateObjectsUsingBlock 類似for in 但是比for in效率高一些
這些只是寫這個小demo的隨筆,我當(dāng)前公司做的項目整體用也是Reactivecocoa+ MVVM框架,以后會慢慢多寫點它的用法,這里只是冰山一角。
另外目前在學(xué)習(xí)Python中,會在簡書中記錄自己學(xué)習(xí)的點點滴滴