今天被问到在UITableView的滑动过程中,怎么对其进行优化,使其不卡顿。
回答的时候有点仓促,感觉很多了解的东西没有说出来,总结下吧。
首先是,高度显示优化。
先用estimatedRowHeight这个属性,配合AutoLayout,设置rowHight = UITableViewAutomaticDimension,cell就变成自适应的高度。
同时,还可以 利用RunLoop空闲时间执行预缓存任务。
上面的文章介绍了一种找到优化的合适方案:用RunLoopObserver 找到 kCFRunLoopDefaultMode 的空闲时间片来计算。
可优化地方:
-
确保控件的opaque属性设置为true,确保backgroundColor和父视图颜色一致且不透明。
-
如无特殊需要,不要设置低于1的alpha值。
-
确保UIImage没有alpha通道。
避免临时转换
-
确保图片大小和frame一致,不要在滑动时缩放图片。
-
确保图片颜色格式被GPU支持,避免劳烦CPU转换。
慎用离屏渲染
-
绝大多数时候离屏渲染会影响性能。
-
重写drawRect方法,设置圆角、阴影、模糊效果,光栅化都会导致离屏渲染。
-
设置阴影效果是加上阴影路径。
-
滑动时若需要圆角效果,开启光栅化。
参考
① http://www.cocoachina.com/ios/20160208/15238.html