美文网首页
UITableView的性能优化

UITableView的性能优化

作者: Jean_Lina | 来源:发表于2020-07-13 16:56 被阅读0次
  • UITableView的回调顺序是先多次调用tableView:heightForRowAtIndexPath:以确定contentSize及Cell的位置,然后才会调用tableView:cellForRowAtIndexPath:,从而来显示在当前屏幕的Cell。
  • 1.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