原文由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類型編寫特殊的代碼。