码迷,mamicode.com
首页 > 移动开发 > 详细

iOS绘图事务的运行验证

时间:2019-01-31 19:17:04      阅读:247      评论:0      收藏:0      [点我收藏+]

标签:ESS   www.   ons   stack   width   设置   play   解码压缩   代理   

结合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绘图事务的运行验证

标签:ESS   www.   ons   stack   width   设置   play   解码压缩   代理   

原文地址:https://www.cnblogs.com/feng9exe/p/10343121.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!