ios TableView性能优化技巧
2016-03-29 09:58
337 查看
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
2.2、 刷新局部的section
三、缓存视图高度
/article/4791714.html
无论是否需要创建一个新的cell,你需要缓存rows的高度,因为这是TableView所需要的信息。如果你的cell的高度是固定的,你不必担心。然而,如果它不是固定的,你需要确保你的cell计算足够的快。
一般的做法,选择在model增加一个成员变量,CGFloat类型,用这个成员变量去记住每个cell的高度。
四、不要用AutoLayout
。使用的子视图越多,AutoLayout的效率越低,这是事实。那么为什么AutoLayout相对低效呢。是因为它要根据底层“Cassowary”的约束求解系统进行约束计算,从而得到一个唯一解,这时AutoLayout才不会报警告或错误(相信拖控件的同学肯定遇到过各种黄色警告和红包约束冲突吧)。假如内部的子控件越多,它需要进行的线性或非线性计算量越大,需要求解的约束越多,CPU计算耗费大量时间从而导致超过了一个VSync周期。相反的,假如我们进行手动布局,都是非常简单的线性计算,CPU就不用浪费那么时间,CPU的压力不会很大。(虽然这么说,但是我还是会继续取用AtuoLayout!)
一、视图上面的优化
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];
三、缓存视图高度
/article/4791714.html
无论是否需要创建一个新的cell,你需要缓存rows的高度,因为这是TableView所需要的信息。如果你的cell的高度是固定的,你不必担心。然而,如果它不是固定的,你需要确保你的cell计算足够的快。
一般的做法,选择在model增加一个成员变量,CGFloat类型,用这个成员变量去记住每个cell的高度。
四、不要用AutoLayout
。使用的子视图越多,AutoLayout的效率越低,这是事实。那么为什么AutoLayout相对低效呢。是因为它要根据底层“Cassowary”的约束求解系统进行约束计算,从而得到一个唯一解,这时AutoLayout才不会报警告或错误(相信拖控件的同学肯定遇到过各种黄色警告和红包约束冲突吧)。假如内部的子控件越多,它需要进行的线性或非线性计算量越大,需要求解的约束越多,CPU计算耗费大量时间从而导致超过了一个VSync周期。相反的,假如我们进行手动布局,都是非常简单的线性计算,CPU就不用浪费那么时间,CPU的压力不会很大。(虽然这么说,但是我还是会继续取用AtuoLayout!)
相关文章推荐
- iOS 初始化单例
- iOS同一label设置不同颜色
- ios 星星评分(支持点击和滑动)
- iOS开发-系统级分享
- ios中json解析出现的null问题
- IOS用CGContextRef画各种图形(文字、圆、直线、弧线、矩形、扇形、椭圆、三角形、圆角矩形、贝塞尔曲线、图片)
- 【代码笔记】iOS-获得设备型号
- iOS 最新版 CocoaPods 的安装流程
- iOS 代码取得到 Storyboard和XIB控件,控制器
- iOS调用系统功能
- iOS nib file owner
- iOS:代理(delegate)理解及使用
- iOS基础视频_适合初学者入门
- iOS程序运行流程
- 选择ios应用开发培训还是安卓软件培训?
- iOS slider 改变方向变竖
- iOS 摄像头开始闪光灯
- [IOS笔记] - addChildViewController
- IOS学习 多线程NSThread 共享变量 卖票
- iOS: 聊聊 Designated Initializer(指定初始化函数)