UITableview的優(yōu)化方法(緩存高度,異步繪制鸣皂,減少層級(jí)瞪讼,hide,避免離屏渲染)
1 緩存高度
提前計(jì)算好 cell 的高度和布局
iOS8后蛛壳,會(huì)邊滑動(dòng)邊調(diào)用heightForRowAtIndexPath:這個(gè)方法; 如果把計(jì)算cell高度的方法寫在這兒, 不僅每次都會(huì)調(diào)用計(jì)算方法, 而且重復(fù)滑動(dòng)的話, 還會(huì)再次計(jì)算; 所以我們一般在網(wǎng)絡(luò)請(qǐng)求結(jié)束后杏瞻,更新界面之前就把每個(gè) cell 的高度算好所刀,緩存到相對(duì)應(yīng)的 model 中。2 異步繪制
在Cell上添加系統(tǒng)控件的時(shí)候捞挥,實(shí)質(zhì)上系統(tǒng)都需要調(diào)用底層的接口進(jìn)行繪制浮创,當(dāng)我們大量添加控件時(shí),對(duì)資源的開銷也會(huì)很大砌函,所以我們可以索性直接繪制斩披,提高效率3 減少層級(jí)
減少SubViews的數(shù)量, 在滑動(dòng)的列表上,多層次的view會(huì)導(dǎo)致幀數(shù)的下降讹俊。
例如: 繪制 cell 不建議使用 UIView垦沉,建議使用 CALayer。
從形式來說:UIView 的繪制是建立在 CoreGraphic 上的劣像,使用的是 CPU乡话。CALayer 使用的是 Core Animation,CPU耳奕,GPU 通吃绑青,由系統(tǒng)決定使用哪個(gè)。View的繪制使用的是自下向上的一層一層的繪制屋群,然后渲染闸婴。Layer處理的是 Texure,利用 GPU 的 Texture Cache 和獨(dú)立的浮點(diǎn)數(shù)計(jì)算單元加速 紋理 的處理芍躏。4.hide顯示
盡量少用addView給Cell動(dòng)態(tài)添加View邪乍,可以初始化時(shí)就添加,然后通過hide來控制是否顯示5.避免離屏渲染:少用圓角对竣,可用貝塞爾曲線畫
6.正確地使用UITableViewCell的重用機(jī)制:多種類型的cell庇楞,能不復(fù)用就不復(fù)用。
7.避免阻塞主線程:子線程計(jì)算復(fù)雜的數(shù)學(xué)問題
- 按需加載:用懶加載
9.盡可能重用開銷比較大的對(duì)象 比如:NSDateFormatter
10 盡量減少計(jì)算的復(fù)雜度
11.用輕量級(jí)的對(duì)象
UIView是 CALayer 的代理否纬,layer本身并不能響應(yīng)事件吕晌,因?yàn)閘ayer是直接繼承自NSObject,不具備處理事件的能力临燃。而 UIView 是繼承了UIResponder 的睛驳,
當(dāng)只是展示時(shí)用 layer 代替UIView
技巧
可以通過模擬器中debug模式查看圖層
- Color Blended Layers 綠?色越多,代表混合的情況越少膜廊,紅?色越多App UI急需改進(jìn).
- Slow Animations 該功能可以降低app中動(dòng)畫的運(yùn)?行行速度乏沸,適合調(diào)試包含復(fù)雜動(dòng)畫的應(yīng)?用程序
- Color Copied Images:該選項(xiàng)可以給繪制時(shí)被Core Animation復(fù)制的圖?片添加藍(lán)綠?色疊加層。
- Color Misaligned Images:如果圖?片邊界沒有與?目標(biāo)像素完美對(duì)?齊爪瓜,該功能可為圖?片疊加上?一層品紅?色蹬跃。如果圖?片使?用確定的?比例例?大?小繪制,那么該功能會(huì) 為圖?片添加?一層?黃?色疊加铆铆。
- Color Off Screen Rendered:.該選項(xiàng)為離屏渲染內(nèi)容添加?一個(gè)?黃?色的疊加層蝶缀。
--初稿
持續(xù)更新中......