UITableView的性能優(yōu)化歸根結(jié)底就是平衡GPU跟CPU的負(fù)載均衡,主要優(yōu)化途徑包括
1.利用蘋果提供的cell重用機(jī)制罐农。
2.不要在 cellForRowAtIndexPath: 方法綁定數(shù)據(jù)竿刁,因?yàn)檫@時(shí) cell 還沒顯示勤讽,而是使用 UITableViews 的委托方法 tableView:willDisplayCell:forRowAtIndexPath:琼牧。
3.緩存cell的高度丙唧,分為兩種情況:1.當(dāng)cell的高度都是一樣的時(shí)候独撇,直接給tablview設(shè)置rowheight 2.當(dāng)cell高度不固定的 時(shí)候攀痊,在綁定model的時(shí)候丽涩,就把cell的高度計(jì)算出來棺滞,作為model的一個(gè)屬性進(jìn)行緩存。
4.復(fù)雜的cell盡量不適用autolayout矢渊,改用frame继准。因?yàn)閍utolayout會(huì)損耗一部分計(jì)算性能。
5.減少子view的數(shù)量跟層級(jí)矮男。子view的層級(jí)越深移必,渲染到屏幕上的計(jì)算量也就越大
6.對(duì)于不透明的view,設(shè)置opaque為YES毡鉴,在繪制這個(gè)view的時(shí)候就不需要考慮view覆蓋的情況
7.UIView的drawRect方法中使用CoreGraphic來進(jìn)行CPU的渲染崔泵,減少對(duì)于GPU的負(fù)載。也就是減少cell中UIView,UIImageView猪瞬,UILabel的使用憎瘸。
8.cell layer的shouldRasterize要設(shè)置為YES
9.cell中的圖片使用異步加載策略,防止卡住主線程
10.盡量少用不透明的圖層陈瘦,也就是說吧圖層的alpha設(shè)置為1
11.盡量不要用addsubview給cell動(dòng)態(tài)的添加view幌甘,可以在初始化的時(shí)候添加,但是通過hidden屬性來控制是否顯示
12.盡量使用大小一致的圖片,也就是為了防止由于大小不一致造成的圖片縮放的開銷锅风。
13.設(shè)置mask酥诽,shadows,opacity皱埠,antialiasing會(huì)觸發(fā)離屏渲染肮帐,因此要避免使用這些屬性。還有設(shè)置圖片的圓角也會(huì)觸發(fā)離屏渲染边器,所以可以考慮把繪制操作放在后臺(tái)線程中執(zhí)行训枢,繪制完成之后回到主線程進(jìn)行操作。如果需要在cell中使用上面的屬性饰抒,可以加上下面兩行代碼:
self.layer.shouldRasterize = YES;
self.layer.rasterizationScale = [UIScreen mainScreen].scale;
14.盡量創(chuàng)建一種類型的cell肮砾,可以傳入不同的cell類型進(jìn)行區(qū)分诀黍,從而創(chuàng)建出不同樣式的cell袋坑。