返回 登录
0

针对UITableVew在UIViewController使用时代码量的优化

这篇文章为一些刚入行的新手贡献出来。本人不是大牛,只是有两年多工作经验而已,还忘各位大神指点一二,轻点虐。

最近有不少的新手总是会加QQ问我一些问题,提供思路后解决不了的问题我会直接让他把项目发过来帮他们修改。然后本人见识了各种风生水起的代码。比如说在Controller中写上不计其数的代码,再比如说在TableView的协议方法中协上数百行的代码。更有甚者,每个页面只有一个Controller类(每个页面1000行以上),这么耿直的代码我看完之后差点失去自信力,努努力我能替你去上班。

在帮他们看代码的时候,也做了不少的总结。所以才决定为刚入门的同学写一篇这关于UITableView在UIViewControler的代码优化的文章。

UITabelView主要是针对于Datasource数据源协议方法中会存在着大量的代码:

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

原因一:在动态的tableview中会有很多的也许需要在这个方法中来处理。比如说美团网的自定义cell中有好评的的等级、有图片、有标题、还有经纬度来计算距离等等,这些业务都会增加代码量。
原因二:在静态的tableview中会有很多的分区,因此也会有很多人写上很多的分支语句。然后再return各种自定义的cell。比如一般APP中的个人中心页面。可能会有很多的section。

总结了这两点的原因,那么接下来分享一下我是如何来优化UITableView的协议方法中大量代码的,我又是如何将这一堆代码从UIViewController中剥离出来的。可能我的代码不太符合MVC或者MVVM架构模式的标准。但是我觉得每个人做项目的架构都是基于这些经典的架构基础上去做出调整的,大家应该都不会做的那么生硬吧,每人的理解都会有不一样的地方。所以我觉得我写的应该也不为过吧?(有什么说的不对的地方,还希望各位牛人给出指点,我也慢慢的改进。)

下面我就拿一个简单的页面来说明一下如何将UIViewController中的UITableView协议方法进行优化。

拿下图也页面来做个例子吧。
图片描述
看图片我们可以分析出有三个section。
第一个section中有两行,第二个和第三个section分别有一样。
下面就开始构建这个页面。代码上实现很简单,重点是优化UITableView的协议方法,优化UITableView的协议方法,优化UITableView的协议方法。(重要的事情说三遍)。

图片描述
上图为Find模块的结构,重点内容使用FindCellModel这个类。
将cellForRowAtIndexPath:这个方法中的大量内容剥离到FindCellModel这个类中。

贴上代码

FindCellModel中添加如下方法

-(NSInteger) findnumberOfRowsInSection:(NSInteger)section;

-(UITableViewCell *)findtableView:(UITableView *)tableView findcellForRowAtIndexPath:(NSIndexPath *)indexPath;

FindViewController中的tableview协议方法如下

-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return 3;
}

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    FindCellModel *cellModel = [[FindCellModel alloc]init];
    return [cellModel findnumberOfRowsInSection:section];
}

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    FindCellModel *cellModel = [[FindCellModel alloc]init];
    return [cellModel findtableView:tableView findcellForRowAtIndexPath:indexPath];
}

这样来写是不是让你的UIViewController更加的精简。通读性也更高了。
对tableview中的业务我们可以到FindCellModel中去查看,就不用在数千行的UIViewController中再去寻找了。

下面我还是把具体的代码放到github中吧。这个代码仅供新手来观看吧。大牛的代码或许比我的bigger更高。

GitHub下载地址:https://github.com/ACEYL/TableOptimize.git

评论