閑著沒事,想起最近好多關(guān)于性能的文章,決定去研究一下Instruments 的使用。
要使用就得知道這東西是啥。
官方文檔點這個鏈接https://developer.apple.com/library/ios/documentation/DeveloperTools/Conceptual/InstrumentsUserGuide/
還有一個不知道什么版本的中文翻譯鏈接http://cdn.cocimg.com/bbs/attachment/Fid_6/6_24457_90eabb4ed5b3863.pdf
Core Animation
第一個選項 混合圖層
設(shè)備會把當前圖層和背景圖層進行alphe疊加,這是一項很耗性能的一件事。如果動畫中每一幀都做疊加,性能的損耗是很嚴重。
優(yōu)化方式:
1.uiview 盡量設(shè)成與superview 同背景色
2.貼圖避免使用帶alpha通道的圖片,
如果必須使用Alpha,則主動去Alpha,提前和背景色合成為不含Alpha的圖片
3.UIImageview 避免使用半透明
UIImageview的半透明取決于一下幾項
1.顯示的圖片
2.View的opaque屬性的值
3.View的alpha值
4.View的背景色
當Opaque屬性為YES的時候,imageView的alpha屬性會被忽略,圖層是否半透明取決于圖片和imageView本身的背景色的疊加結(jié)果。
如果疊加結(jié)果圖全部不透明,則圖層不透明,不會觸發(fā)blend操作。
如果疊加結(jié)果中出現(xiàn)半透明區(qū)域,則整個圖層都會變成不透明,會觸發(fā)blend操作。
如果Opaque屬性為NO的時候,圖層是否半透明取決于圖片和imageView的multiplied疊加結(jié)果確定。
簡單理解,如果可能盡量:
設(shè)置Opaque為YES(其實默認就是YES)
背景色設(shè)置為不含alpha的顏色
alpha值最好也是1(不透明)
適用場景:
通用優(yōu)化規(guī)則,不會造成副作用
Color Hits Green and Misses Red
能夠使用緩存的光柵化標為綠色。
這個選項主要是檢測我們有無濫用或正確使用layer的shouldRasterize屬性.成功被緩存的layer會標注為綠色,沒有成功緩存的會標注為紅色。
在測試的過程中,第一次加載時,開啟光柵化的layer會顯示為紅色,這是很正常的,因為還沒有緩存成功。但是如果在接下來的測試,例如我們來回滾動TableView時,我們?nèi)匀话l(fā)現(xiàn)有許多紅色區(qū)域,那就需要謹慎對待了。因為像我們前面討論過的,這會引起offscreen rendering。
檢查一下是否有濫用該屬性,因為系統(tǒng)規(guī)定的緩存大小是屏幕大小的2.5倍,如果使用過度,超出了緩存大小,會引起offscreen rendering。檢測layer是否內(nèi)容不斷更新,內(nèi)容的更新會導致緩存失效和大量的offscreen rendering.
Color copied images
這個選項主要檢查我們有無使用不正確圖片格式,若是GPU不支持的色彩格式的圖片則會標記為青色,則只能由CPU來進行處理。我們不希望在滾動視圖的時候,CPU實時來進行處理,因為有可能會阻塞主線程。
Color misaligned images
這個選項檢查了圖片是否被放縮,像素是否對齊。被放縮的圖片會被標記為黃色,像素不對齊則會標注為紫色。
Color offscreen-rendered yellow
這個選項將需要offscreen渲染的的layer標記為黃色。
NavigationBar和ToolBar被標記為黃色。因為它們需要模糊背后的內(nèi)容,這需要offscreen渲染。但是這是我們需要的。而圖片也是被標記為黃色,那是因為陰影的緣故。我前面已經(jīng)提到了這一點,如果此時我們用shadowPath來替代的話,就能夠避免offscreen渲染帶來的巨大開銷。
Color OpenGL fast path blue
這個選項勾選后,由OpenGL compositor進行繪制的圖層會標記為藍色。這是一個好的結(jié)果。
Flash updated regions
會標記屏幕上被快速更新的部分為黃色,我們希望只是更新的部分被標記完黃色。