ios TableView性能优化技巧

来源:互联网 发布:湘北vs山王球员数据 编辑:程序博客网 时间:2024/05/29 15:22

UITableView是app最常用的控件之一,很多app都逃离不了,甚至于有的app全部都是UITableView,可见,这个控件的重要性非同一般的。但是,在使用UITableview上,会经常遇到性能上的问题,例如 : 滑动卡顿(最经典的是图文混排的列表)。下面,就泛谈下这个控件可以做哪些优化,使之性能得到提升。

一、视图上面的优化

1、使用不透明视图(alpha=1)。设置cell上所有视图的opaque = YES。不透明视图可以极大的提高视图的渲染速度。

2、减少视图的数目。使用自定义的view,而非预定义的view,明显会快些。顾名思义就是说,自定义cell后,cell里面的子视图也抽象封装。

二、视图方面的刷新

我们经常请求完数据后,讲数据传递给tableview后,我们需要调用表的reloadData 方法,调用这个方法后,会继续调用创建cell和高度的方法。这样的话,就有可能存在性能方面的问题,也有可能导致crash。貌似有点讲偏了,我这里要强调的是,如果我们只是局部刷新,那就采用局部刷新的方法,尽量不必要去调用reloadData。常见的场景就是例如,微信朋友圈,涉及到单条说说的评论,我们只需要刷新单个单元格或者单个组就能满足我们要求。
2.1、刷新单个cell

NSIndexPath *path = [NSIndexPath indexPathForRow:0 inSection:0];[self.tableview reloadRowsAtIndexPaths:[NSArray arrayWithObjects:path, nil] withRowAnimation:UITableViewRowAnimationFade];

2.2、 刷新局部的section

[self.tableview reloadSections:[[NSIndexSet alloc] initWithIndex:0] withRowAnimation:UITableViewRowAnimationFade];

三、缓存视图高度
http://www.cnblogs.com/wengzilin/p/4288027.html
无论是否需要创建一个新的cell,你需要缓存rows的高度,因为这是TableView所需要的信息。如果你的cell的高度是固定的,你不必担心。然而,如果它不是固定的,你需要确保你的cell计算足够的快。
一般的做法,选择在model增加一个成员变量,CGFloat类型,用这个成员变量去记住每个cell的高度。

四、不要用AutoLayout
。使用的子视图越多,AutoLayout的效率越低,这是事实。那么为什么AutoLayout相对低效呢。是因为它要根据底层“Cassowary”的约束求解系统进行约束计算,从而得到一个唯一解,这时AutoLayout才不会报警告或错误(相信拖控件的同学肯定遇到过各种黄色警告和红包约束冲突吧)。假如内部的子控件越多,它需要进行的线性或非线性计算量越大,需要求解的约束越多,CPU计算耗费大量时间从而导致超过了一个VSync周期。相反的,假如我们进行手动布局,都是非常简单的线性计算,CPU就不用浪费那么时间,CPU的压力不会很大。(虽然这么说,但是我还是会继续取用AtuoLayout!)

0 0
原创粉丝点击