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