欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Nimbus初理解

程序员文章站 2022-07-05 23:22:43
...

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