郝萌主倾心贡献,尊重作者的劳动成果,请勿转载。
如果文章对您有所帮助,欢迎给作者捐赠,支持郝萌主,捐赠数额随意,重在心意^_^
我要捐赠: 点击捐赠
Cocos2d-X源码下载:点我传送
游戏官方下载:http://dwz.cn/RwTjl
游戏视频预览:http://dwz.cn/RzHHd
游戏开发博客:http://dwz.cn/RzJzI
游戏源码传送:http://dwz.cn/Nret1
影响 UITableView 滚动的流畅性的原因
1、 在代理方法中做了过多的计算占用了 UI 线程的时间
2、Cell 中 view 的组织复杂
首先要明白 tableview 的代理方法的调用顺序和时机。
对于一般的应用会有如下顺序:
1、向代理要 number Of Rows。
2、对于每行向代理要 height For Row At Index Path。
3、向代理要 当前屏幕可见的 cell For Row At Index Path 。
4、然后 cell 就显示出来了。
tableView:heightForRowAtIndexPath:很多人都把优化的重点放到了 cell for row at indexpath 那个方法里了,
在这里尽可能的少计算,但是却忽略了另一个很轻松就能提升加载时间的方法 :
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPathTable
View 在每次 reload data 时都会要所有 cell 的高度!
这就是说你有一百行 cell,就像代理要100次每个cell 的高度,而不是当前屏幕显示的cell 的数量的高度!
对于提升 tableView:heightForRowAtIndexPath: 计算量,就是尽可能的让这个方法的计算复杂度为 O(1),
就是只是简单的从数组中取一个值,然后返回!
iOS7以上的隐藏特性
UITableView 非常快速高效,除非你开始使用tableView:heightForRowAtIndexPath:
它会开始为你表中任意元素调用此方法,
即便没有可视对象,就比如其内在的UIScrollView只是去获取正确的contentSize。
此前有一些变通方法,但都不好用。
iOS7 中,苹果公司终于承认这一问题,并添加tableView:estimatedHeightForRowAtIndexPath:这个方法
延迟了实际滚动时间成本的大部分。
如果你不知道一个cell的大小,返回UITableViewAutomaticDimension即可。
使用了以上所述方法依然不流畅
注意estimatedHeightForRowAtIndexPath和heightForRowAtIndexPath两个方法设置cell的高度要一致。
优化再优化之后依然感觉卡卡
没办法了,卡卡更健康。
微信也在卡ing...
郝萌主倾心贡献,尊重作者的劳动成果,请勿转载。
如果文章对您有所帮助,欢迎给作者捐赠,支持郝萌主,捐赠数额随意,重在心意^_^
我要捐赠: 点击捐赠
Cocos2d-X源码下载:点我传送
游戏官方下载:http://dwz.cn/RwTjl
游戏视频预览:http://dwz.cn/RzHHd
游戏开发博客:http://dwz.cn/RzJzI
游戏源码传送:http://dwz.cn/Nret1
版权声明:本文为博主原创文章,未经博主允许不得转载。