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

标签: ios开发uitableview优化线程ui
934人阅读 评论(0) 收藏 举报
分类:

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

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

我要捐赠: 点击捐赠

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

1
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:436192次
    • 积分:6504
    • 等级:
    • 排名:第3680名
    • 原创:188篇
    • 转载:3篇
    • 译文:1篇
    • 评论:187条
    博客公告
    博客专栏