Three20框架的中止更新,再接着使用Three20框架用於開發,就顯得存在隱患。幸虧,Three20中的一位做者,開發出了一套輕量型框架Nimbus。相比Three20,Nimbus小了不少,固然,如今也在慢慢成長,同時,Nimbus的耦合性沒那麼高,支持命名空間,這是兩個很大的優勢。框架
應用中使用最多的controller,普通的viewController和tableViewController,特別是後者。關於tableViewController,從controlelr到dataSource到cell,Nimbus、Three20都有本身的一套流程。若是你熟悉或者使用過研究過Three20,會發現二者之間不少類似的地方,item(Three20)對應cellObject(Nimbus),dataSouce(Three20,其實不是tableView的dataSource)對應niTableModel(Nimbus)。spa
不一樣的地方是,Nimbus使用簡單工廠模式,輸出獲得指定的cell。code
cellObject中重寫繼承
- (Class)cellClass
來返回獲得指定的cell類型。開發
而在cell中,方法文檔
- (BOOL)shouldUpdateCellWithObject:(id)object
來獲得對於cellObject,從而取出所需的數據。博客
NITableViewModel的做用,實際上是處理獲得的數據,它實現了UITableViewDataSource的方法產品
-(UITableViewCell *)tableView: (UITableView *)tableView cellForRowAtIndexPath: (NSIndexPath *)indexPath
這其中self.delegate的方法是工廠的產品輸出方法,而NICellFactory負責處理這個,方法以下,it
- (UITableViewCell *)tableViewModel:(NITableViewModel *)tableViewModel cellForTableView:(UITableView *)tableView atIndexPath:(NSIndexPath *)indexPath withObject:(id)object
+ (UITableViewCell *)tableViewModel:(NITableViewModel *)tableViewModel cellForTableView:(UITableView *)tableView atIndexPath:(NSIndexPath *)indexPath withObject:(id)object
上面這個方法有兩種,靜態的和實例的,當使用的model的delegate是NICellFactory實例,則調用實例方法,是[NICellFactory Class]則調用類方法。table
這裏,到底要調用靜態方法,仍是實例方法,是看具體狀況的須要。當一整個tableView只須要一種cell的時候,建議使用靜態方法,固然cellObject要指定對應的cell類型;當須要修改cellObject指定的cell,在不須要或者懶得去新建一個徹底繼承、不用重寫原來cellObject類的子類的時候,能夠考慮使用實例方法。
固然,多數狀況下,在項目中會使用到實例方法,由於咱們能夠有一個baseCellObject和一個baseCell,baseCellObject具有最基本的屬性和方法,而baseCell指定映射就能夠,後來咱們自定義的cell都繼承baseCell,再調用NICellFactory來修改baseCellObject到cell的映射就能夠知足大部分須要。
下面是NICellFactory修改映射的方法:
- (void)mapObjectClass:(Class)objectClass toCellClass:(Class)cellClass
ps:想寫這篇關於Nimbus的理解心得很久了,由於網上能查到的Nimbus資料實在是太少了,本身是個菜鳥初學者,別人一些用Nimbus寫好的框架,有的實在是看不太懂,而後其實到頭來,仍是要看懂,至少了解Nimbus的構架的,因此仍是乖乖地讀Nimbus的文檔,用本身的方法來搞懂這個過程。語言組織得很差,邏輯有點散亂,忘見諒,之後會整理好的。
聲明:今天想搜一點資料,竟然在別的地方搜到本身這篇博客,我只想說,歡迎轉載和分享,但請註明出處。