tableView的优化
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