Nimbus初理解
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)。
不同的地方是,Nimbus使用简单工厂模式,输出得到指定的cell。
cellObject中重写
- (Class)cellClass
来返回得到指定的cell类型。
而在cell中,方法
- (BOOL)shouldUpdateCellWithObject:(id)object
来得到对于cellObject,从而取出所需的数据。
NITableViewModel的作用,其实是处理得到的数据,它实现了UITableViewDataSource的方法
-(UITableViewCell *)tableView: (UITableView *)tableView
cellForRowAtIndexPath: (NSIndexPath *)indexPath
这其中self.delegate的方法是工厂的产品输出方法,而NICellFactory负责处理这个,方法如下,
- (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]则调用类方法。
这里,到底要调用静态方法,还是实例方法,是看具体情况的需要。当一整个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的文档,用自己的方法来搞懂这个过程。语言组织得不好,逻辑有点散乱,忘见谅,以后会整理好的。
声明:今天想搜一点资料,居然在别的地方搜到自己这篇博客,我只想说,欢迎转载和分享,但请注明出处。
转载于:https://my.oschina.net/u/574245/blog/227167
上一篇: ES5总结(持续更新)
下一篇: redis入门