tableView的优化

作者: 郭杭 | 来源:发表于2016-11-09 15:40 被阅读721次

    cell里的image使用SDWebimage,高清大图用YYWebimage来下载缓存图片

    cell内部控件的层次结构尽量的少,使用drawRect画,但是有一个问题,点击事件没办法处理

    cell内部所有显示的数据提前准备好,尽量少的实时计算,不要在cell显示的时候才去计算,先计算好,在刷新界面.

    尽量少的使用富文本

    时间格式化对象使用同一个

    列表内部的子控件都要少量的计算,所有控件大小,位置提前计算好,存起来,不要每次去计算,少的使用约束,因为约束是系统会去计算.

    缓存行高,因为:利用自动布局计算行高很消耗cpu,每次滚动到该cell都要计算,"self.contentView.layoutIfNeeded",cell将要显示出来的时候,行高先确定,缓存起来self.contentView.layoutifNeeded这个方法就是布局contview里的控件大小,(定义一个属性来记对应cell的行高),注意:要移除contentView的底部约束

    利用cpu异步绘制cell的layer    "layer.drawsAsynchronously"

    栅格化,将cell内容渲染成一张图片,在滚动的时候就是一张图片layer.shouldRasterize,layer.rasterizationScale

    因为如果上层控件半透明的话,系统会努力的绘制下层控件的内容与上层控件的内容,并且将两个内容按照透明度去进行绘制

    在cell中不要用layer去画圆角,服务器返回图片就是圆角的,CALayer的cornerRadius是一个超级费性能的东西,它会在每一帧都裁剪圆角,比如在tableview每个cell里都有一个裁剪属性,无论你有没有滚动视图都会运算裁剪圆角,很费CPU性能!

    cell的按需加载 具体参考: https://www.jianshu.com/p/5ca924b89e8b

    相关文章

      网友评论

      • wahkim:不是要拿到滚动结束后,最后的三个indexpath,并使其显现出来,为什么在返回cell的时候要把 contentview隐藏掉。还有滑动过程中indexpath怎么处理
        wahkim:@郭杭 谢谢 我研究下
        郭杭:可以看下 http://www.jianshu.com/p/5ca924b89e8b 这篇文章

      本文标题:tableView的优化

      本文链接:https://www.haomeiwen.com/subject/vbqjyttx.html