原文由Alexander Orlov发表于medium,地址为https://medium.com/ios-os-x-development/perfect-smooth-scrolling-in-uitableviews-fd609d5275a5#.so9tpnlk1
http://southpeak.github.io 翻译by南峰子的技术博客
1,使用内建方法优化UITableView的正确方法是:
重用cell实例:对于特殊类型的cell,你应该只有一个实例,而没有更多。
不要在cellForRowAtIndexPath:方法中绑定数据,因为在此时cell还没有显示。可以使用UITableView的delegate中的tableView:willDisplayCell:forRowAtIndexPath:方法。
快速计算cell高度。对于工程师来说这是常规工作,但你将会为优化复杂cell的平滑滑动所付出的耐心而获取回报。
2,
渲染最慢的操作之一是混合(blending)。混合操作由GPU来执行,因为这个硬件就是用来做混合操作的(当然不只是混合)。提高性能的方法是减少混合操作的次数。
在iOS模拟器上运行App,在模拟器的菜单中选择’Debug‘,然后选中’Color Blended Layers‘。然后iOS模拟器就会将全部区域显示为两种颜色:绿色和红色。
绿色区域没有混合,但红色区域表示有混合操作。
我们可以在UIView的drawRect:方法中使用CoreGraphics操作来执行CPU渲染。通过这种方式,你会撤销在一些UIView上(在任何情况下,它们都是不必要的)的所有缓存优化操作。但是,这种方法禁用了一些混合操作,卸载GPU,从而使UITableView的更顺畅。
但是记住:这提高了渲染性能,不是因为CPU比GPU更快!它可以让我们通过为让CPU来执行某些渲染任务,从而卸载GPU,因为在很多情况下,CPU可能不是100%负载的。
优化混合操作的关键点是在平衡CPU和GPU的负载。
优化UITableView中绘制数据操作的小结:
减少iOS执行无用混合的区域:不要使用透明背景,使用iOS模拟器或者Instruments来确认这一点;如果可以,尽量使用没有混合的渐变。
优化代码,以平衡CPU和GPU的负载。你需要清楚地知道哪部分渲染需要使用GPU,哪部分可以使用CPU,以此保持平衡。
为特殊的cell类型编写特殊的代码。