首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >iOS CPU异步绘制的流程

iOS CPU异步绘制的流程

作者头像
展菲
发布于 2021-04-26 11:23:44
发布于 2021-04-26 11:23:44
1.1K0
举报
文章被收录于专栏:网罗开发网罗开发

前言


我们知道iOS界面渲染需要依靠强大图像计算能力的GPU,但是GPU并不是万能的,过分依赖GPU往往会导致GPU的性能出现瓶颈,要么导致离屏渲染,严重时还会出现卡顿现象。为了减轻GPU的负担,我们有时也需要依靠CPU来进行协助绘制,这篇文章主要讲解CPU进行异步绘制的流程,部分内容摘录自iOS探索:UI视图之卡顿、掉帧及绘制原理

UIView的绘制原理(CPU绘制)


▐ UIView绘制流程图:

UIView绘制流程以及异步绘制.png

  • 当我们调用[UIView setNeedsDisplay]这个方法时,其实并没有立即进行绘制工作,系统会立刻调用CALayer的同名方法,并且会在当前layer上打上一个标记,然后会在当前runloop将要结束的时候(下一个绘制周期)调用[CALayer display]这个方法,然后进入我们视图的真正绘制过程
  • 在[CALayer display]这个方法的内部实现中会判断这个layer的delegate是否响应displayLayer:这个方法,如果响应这个方法,就会进入到系统绘制流程中;如果不响应这个方法,那么就会为我们提供异步绘制的入口
  • 在异步绘制中,会先判断代理是否有实现协议的drawLayer:inContext方法,如果有实现,就会创建一个空的寄宿图和Core Craphics的绘制上下文,为绘制寄宿图做准备,然后会在一个合适的时候调用一个我们非常熟悉的方法[UIView drawRect:]来获取寄宿图内容。[UIView drawRect:]这个方法默认是什么都不做,系统给我们开这个口子是为了让我们可以再做一些其他的绘制工作
  • 无论是哪个分支,最终都会由CALayer上传对应的backing store(寄宿图,也即位图bitmap)给GPU,然后就结束了本次绘制流程

异步绘制流程


本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-04-22,如有侵权请联系 cloudcommunity@tencent.com 删除
目录
  • ▐ UIView绘制流程图:
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档