码迷,mamicode.com
首页 > 移动开发 > 详细

iOS开发之UITableView的滚动优化以及隐藏特性的使用

时间:2015-07-07 14:53:13      阅读:216      评论:0      收藏:0      [点我收藏+]

标签:ios开发   uitableview   优化   线程   ui   

郝萌主倾心贡献,尊重作者的劳动成果,请勿转载。

如果文章对您有所帮助,欢迎给作者捐赠,支持郝萌主,捐赠数额随意,重在心意^_^ 

我要捐赠: 点击捐赠

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

版权声明:本文为博主原创文章,未经博主允许不得转载。

iOS开发之UITableView的滚动优化以及隐藏特性的使用

标签:ios开发   uitableview   优化   线程   ui   

原文地址:http://blog.csdn.net/haomengzhu/article/details/46787987

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!