UI视图相关面试问题

注意:本文主讲UI相关面试问题,包括UITableView相关、事件传递&视图相应、图像显示原理、卡顿&掉帧、绘制原理&异步绘制、离屏渲染。

一、UITableView相关

1、重用机制

屏幕快照 2019-10-25 上午10.24.52.png
屏幕快照 2019-10-25 上午10.26.52.png

2、数据源同步
(1)、数据源同步问题

数据源同步问题

(2)、数据源同步解决方案
1>、并发访问、数据拷贝

并发访问、数据拷贝.png

2>、串行访问

屏幕快照 2019-10-25 上午10.50.22.png

二、事件传递&视图相应

1、UIView和CALayer的关系
UIView为其提供内容,以及负责处理触摸等事件,参与响应链。
CALayer负责显示内容contents

屏幕快照 2019-10-25 上午11.09.53.png

三、图像显示原理

屏幕快照 2019-10-25 上午11.30.22.png
屏幕快照 2019-10-25 上午11.31.30.png

1、CPU工作
Layout(UI布局、文本计算); Display(绘制,drawRect方法);Prepare(图片编解码); Commit(提交位图)。
2、GPU渲染管线(openGL)
顶点着色、图元装配、光栅化、片段着色、片段处理。

四、卡顿&掉帧

1、原因

屏幕快照 2019-10-25 上午11.49.26.png

2、优化方案
(1)、CPU
对象创建、调整、销毁;
预排版(布局计算、文本计算);
预渲染(文本等异步绘制,图片编解码等)。
(2)、GPU
纹理渲染(离屏渲染);
视图混合(视图层级复杂度,GPU需要做每个视图的合成)。

五、绘制原理&异步绘制

屏幕快照 2019-10-25 下午12.07.30.png

一、系统绘制流程

屏幕快照 2019-10-25 下午12.09.21.png

二、异步绘制
-[layer.delegate displayLayer:]
代理负责生成对应的bitmap
设置该bitmap作为layer.contents属性的值

屏幕快照 2019-10-25 下午12.11.57.png

六、离屏渲染

1、啥是离屏渲染?
当设置某一些UI视图的图层属性时,如果未被预合成之前不能用于当前屏幕直接显示的时候,就会触发离屏渲染。而离屏渲染的概念起源于GPU层面,指的是GPU在当前屏幕缓冲区以外新开辟一个缓冲区进行渲染操作。
当屏渲染:指的是GPU的渲染操作是在当前用于显示的屏幕缓存区中进行。
2、何时会触发?
(1)、圆角(当和maskToBounds一起使用时)
(2)、图层蒙版
(3)、阴影
(4)、光栅化
3、为何要避免?
(1)、会增加GPU的工作量,会导致CPU和GPU的工作总耗时超过16.7毫秒,会导致UI的卡顿和掉帧。
(2)、创建新的渲染缓冲区,会内存开销。
(3)、上下文切换,会导致GPU额外开销。

最后总结点东西吧,面试官经常问的问题有:

1、系统的UI事件传递机制是咋样的?
2、使UITableView滚动更流畅的方案或思路都有哪些?
3、什么是离屏渲染?
4、UIView和CALayer之间的关系是咋样的?

你可能感兴趣的:(UI视图相关面试问题)