iOS面试题(一)--UI视图相关

116 阅读2分钟

1.UITableView相关

重用机制cell = [tableView dequeueResuableCellWithIdentifier:identifier];

2.UI数据源同步相关

2.1数据源同步方案?

1.并发访问,数据拷贝:对内存开销大 2.串行访问:可能会有延时

3.UI事件传递&响应相关

3.1 UIView和CALayer的关系? UIView为其提供内容,以及负责处理触摸等事件,参与响应链 CALayer负责显示内容contents 单一职责原则

3.2 UI事件怎么传递的? image.png image.png 3.3 UI事件响应? image.png 3.4 UI事件响应的方法?

-(void)touchesBegan:(NSSet *)touchs withEvent:(UIEvent *)event; -(void)touchesMoved:(NSSet *)touchs withEvent:(UIEvent *)event; -(void)touchesEnded:(NSSet *)touchs withEvent:(UIEvent *)event;

这三个都是UIResponder中的方法,UIView也是继承自UIResponder的。

3.5点击C2的白色圆点位置,是怎么响应的?如果Application也没有响应,会怎么样? image.png 如果Application也没有响应,则会忽视掉这个点击事件。

4.UI图像显示原理相关

4.1图像显示原理? image.png image.png

CPU:

Layout          Display            Prepare            Commit

UI布局            绘制            图片编解码            提交位图

文本计算      

GPU渲染管线: 顶点着色     图元装配        光栅化       片段着色   片段处理

5.UI卡顿&掉帧原因相关

5.1卡顿、掉帧的原因? 人眼看到流程的画面是60FPS,即每秒60帧画面,每一帧16.7ms, 在规定的16.7ms之内,在下一个VSync信号到来之前,并没有GPU和CPU共同完成下一帧画面的合成就会造成卡顿、掉帧。

5.2基于TableView滑动的优化方案? CPU:1.可以把对象创建、调整、销毁放到子线程去 2.预排版(布局计算、文本计算)放到子线程去 3.预渲染(文本等异步绘制,图片编码解码等) GPU:1.纹理渲染(避免离屏渲染) 2.视图混合(减轻层级复杂性)

6.UI绘制原理&异步绘制相关

6.1调用UIView的setNeedsDisplay方法,为什么没有立刻发生对应视图的绘制工作? 当前runloop将要结束时才会进入到UI视图的绘制流程当中。

6.2绘制原理?流程图 image.png 6.3异步绘制? image.png

7.UI离屏渲染相关

7.1什么是离屏渲染? 当我们指定了UI视图的某些属性,标记为它在未合成之前不能用与当前屏幕直接显示的时候,就会触发离屏渲染。 而离屏渲染起源于GPU层面,指的是GPU在当前屏幕缓冲区外新开辟一个缓冲区进行渲染操作。

7.2何时触发?

圆角(当和maskToBounds一起使用时)

图层蒙版

阴影

光栅化

7.3为何要避免?

会创建新的渲染缓冲区 上下文切换,会有额外开销

离屏渲染时会增加GPU的工作量,而可能导致GPU和CPU的工作总耗时超过16.7ms,造成UI卡顿掉帧。