UITableView的性能优化
- UITableView的回调顺序是先多次调用tableView:heightForRowAtIndexPath:以确定contentSize及Cell的位置,然后才会调用tableView:cellForRowAtIndexPath:,从而来显示在当前屏幕的Cell。
var cell = tableView.dequeueReusableCell(withIdentifier: cellIdentify) as? DNMessageCell
if cell == nil {
cell = DNMessageCell(style: .default, reuseIdentifier: cellIdentify)
}
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: cellIdentify, for: indexPath)
- 2.cell的类型:定义尽量少类型的cell,善用hidden隐藏、显示子视图
- 3.cell的行高:提前计算并缓存cell的高度
- 4.cell的绘制:异步绘制,自定义cell绘制
- 5.cell的数据加载:滑动时,按需加载
- 6.cell的数据处理
避免同步的从网络、文件获取数据,cell内实现的内容来自web,使用异步加载,缓存请求结果
- 7.cell的图片处理
避免大量的图片缩放、颜色渐变等,尽量显示“大小刚好合适的图片资源”
- 8.cell中缓存View
当cell中的部分View是非常独立的,并且不便于重用的,而且“体积”非常小,在内存可控的前提下,我们完全可以将这些view缓存起来。当然也是缓存在模型中。
- 9.cell的渲染处理
(1)减少subviews的个数和层级
子控件的层级越深,渲染到屏幕上所需要的计算量就越大;如多用drawRect绘制元素,替代用view显示
(2)少用subviews的透明图层
对于不透明的View,设置不透明opaque为YES,这样在绘制该View时,就不需要考虑被View覆盖的其他内容(尽量设置cell的view为opaque,避免GPU对cell下面的内容也进行绘制)
(3)避免CALayer特效(shadowPath)
给cell中View加阴影会引起性能问题,会导致滚动时有明显的卡顿
本文标题:UITableView的性能优化
本文链接:https://www.haomeiwen.com/subject/ueqzcktx.html
网友评论