iOS绘图事务的运行验证

Posted zzfx

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iOS绘图事务的运行验证相关的知识,希望对你有一定的参考价值。

结合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绘图事务的运行验证的主要内容,如果未能解决你的问题,请参考以下文章

片段事务中的实例化错误

移动椭圆的板绘图代码

BottomNavigationView 滞后于片段事务

Firebase 电话身份验证验证 ID 从未设置。 (颤振iOS)

理解片段事务期间片段的生命周期方法调用

iOS/xCode 7 表格单元格不在 iPad 上绘图