# UITableView

# 一、滑动卡顿

# 出现的情况

  1. 主线程阻塞。例如请求数据也是主线程,请求时 + 滑动页面
  2. 图片过大 + 显示条目多
  3. 滑动动画代码过于复杂
  4. 短时请求次数过多,不断重置 tableview.datasource 数据内容
  5. 短时多次请求数据 + cell 在input 输入情况
  6. ...

# 解决

  1. 请求阻塞主线程: 请求采用异步,滑动页面 判断是否请求中,避免重复请求数据
  2. 图片 + 条目过多: 下载后的图片(压缩、后台处理),异步渲染 cell 。仅渲染页面停留的cell
  3. 滑动动画代码过于复杂: 优化动画代码、不要滑动动画
  4. 短时请求次数过多: 看第1条
  5. 短时多次请求数据 + cell 在input 输入情况: 看第1条,在渲染前,是否缓存输入的内容,在渲染时在重新赋值刚输入的内容

预渲染、绘制 都需要注意时机。

# 二、cell 不定高 (我常用12)

  1. 数据模型赋值时,算出高度 (请求数据结果赋值时,并调用计算高度方法 结果给model的一个属性: model.height = xx)
  2. 渲染cell高度 时,根据 indexPath.section 中区分高度(渲染cell高度 尽量避免计算) 多个section中同cell一样高度
  3. 预设高度 estimatedRowHeight + tableView.rowHeight = UITableViewAutomaticDimension (注意:这是所有cell的都不定高了)