1.UITableView相关
重用机制cell = [tableView dequeueResuableCellWithIdentifier:identifier];
2.UI数据源同步相关
2.1数据源同步方案?
1.并发访问,数据拷贝:对内存开销大 2.串行访问:可能会有延时
3.UI事件传递&响应相关
3.1 UIView和CALayer的关系? UIView为其提供内容,以及负责处理触摸等事件,参与响应链 CALayer负责显示内容contents 单一职责原则
3.2 UI事件怎么传递的?
3.3 UI事件响应?
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也没有响应,会怎么样?
如果Application也没有响应,则会忽视掉这个点击事件。
4.UI图像显示原理相关
4.1图像显示原理?
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绘制原理?流程图
6.3异步绘制?
7.UI离屏渲染相关
7.1什么是离屏渲染? 当我们指定了UI视图的某些属性,标记为它在未合成之前不能用与当前屏幕直接显示的时候,就会触发离屏渲染。 而离屏渲染起源于GPU层面,指的是GPU在当前屏幕缓冲区外新开辟一个缓冲区进行渲染操作。
7.2何时触发?
圆角(当和maskToBounds一起使用时)
图层蒙版
阴影
光栅化
7.3为何要避免?
会创建新的渲染缓冲区 上下文切换,会有额外开销
离屏渲染时会增加GPU的工作量,而可能导致GPU和CPU的工作总耗时超过16.7ms,造成UI卡顿掉帧。