1. 程式人生 > >iOS繪圖事務的運行驗證

iOS繪圖事務的運行驗證

ima itl apply alt tps 來看 調用 center win

結合WWDC,以我們的call stack為例,來說明這四個過程分別大概都做了什麽。

layout過程


技術分享圖片

從上面layout的過程可以看出,其所做的主要任務就是將圖層調用代理(也就是視圖)實現整個視圖層級的布局;比較有意思的是,autolayout的約束也是在這個時候更新和施加apply的(-[UIView(Hierarchy) _updateConstraintsAsNecessaryAndApplyLayoutFromEngine])。

display過程


技術分享圖片

按照WWDC視頻的說法,display這個階段是負責draw圖層的內容。如果你的某些視圖實現了drawRect:方法或者其他UIKit提供的視圖采用了圖層的drawInContext:

方法來提供內容的,比如這裏的UILabel的實現,那麽也會在這個階段去調用。從這個階段的工作來講,其是CPU bound(受限於CPU性能)的。

prepare過程


技術分享圖片

prepare過程也是Core Animation準備圖層內容的環節,但是這個過程的準備是給那些沒有實現drawInContext:(視頻說的是drawRect,但實際上drawRect的底層是圖層的drawInContext)而通過其他方式設置圖層內容的視圖準備的;比如,UIImageView,它的實現就是直接解碼壓縮格式的png圖,設置給其layer的contents屬性的。那麽圖片解碼的過程就在這個prepare階段。

commit過程

commit階段是講所有的圖層數據打包,通過進程間通信給到render server(另外一個進程)來繪制顯示到屏幕上。通常情況下,CPU的工作在這個階段是比較少的-從上面的10次重復動畫來看,這個過程僅僅分擔了1ms左右的cpu時間。但是WWDC指出,如果你的視圖層級過於復雜,有非常多的圖層,那這個commit的過程也會耗費比較長的時間。

https://www.awsomejiang.com/2018/03/06/about-core-animtion-animation-stages/


技術分享圖片

iOS繪圖事務的運行驗證