一直覺得很多離屏渲染的文章說得不明不白。
問題1:離屏渲染是時刻存在著箱舞,還是頁面滾動的時候才存在著夺克。
看了很多文章蔬胯,結(jié)合instrument測試fps談談我的理解朋截。
instrument測試fps的時候蛹稍,只有滑動scrollView的時候,fps才會大于0部服,不滑動的時候fps等于0唆姐。我把這特性理解為:只有屏幕顯示的內(nèi)容是動態(tài)的時候,GPU才會渲染廓八。渲染又分屏幕渲染和離屏渲染奉芦,離屏渲染耗費的性能要更大,因為要創(chuàng)建一個新的緩沖區(qū)剧蹂,并進行上下文切換(這兩步才是最耗性能的兩步)声功,所以過多的離屏渲染操作(例如cornerRadius+masksToBounds操作)就會產(chǎn)生卡頓。所以我理解為離屏渲染是在頁面內(nèi)容在刷新的時候(例如滑動scrollView宠叼、tableview.reloadData,DrawRect繪制等操作)才存在著减噪。
然后,當設置shouldRasterizep屬性為YES的時候车吹,耗時的圖層繪制會被緩存筹裕,如果對應的layer及其sublayers沒有發(fā)生改變,在下一幀的時候可以直接復用窄驹。
問題來了朝卒,如果頁面不滾動,fps等于0乐埠,就不會有下一幀抗斤,緩存就用不上,那么我緩存的圖層有什么用丈咐?后來我想明白了瑞眼,例如tableview.reloadData,DrawRect等方法重新繪制頁面,刷新頁面棵逊,如果對應的layer及其sublayers沒有發(fā)生改變伤疙,就能使用緩存,如果改變了,就會再生緩存辆影,反而加大性能的損耗徒像。所以設置shouldRasterizep屬性為YES需謹慎