UI相关

2023-12-14  本文已影响0人  cheng1314

Tableview很多数据,如何优化cell加载

事件传递和响应过程

UIView和CALayer的关系?

UIView 继承 UIResponder,是专门负责事件传递和视图响应的,而CALayer负责视图的显示,这里用到了六大设计原则中的单一职责原则。

UI创建到渲染到屏幕上整体的流程机制?

RunLoop是一个60fps的回调,也就是说每16.7ms绘制一次屏幕,也就是我们需要在这个时间内完成view的缓冲区创建,view内容的绘制这些是CPU的工作;然后把缓冲区交给GPU渲染,这里包括了多个View的拼接(Compositing),纹理的渲染(Texture)等等,最后Display到屏幕上。

事件传递及视图响应过程是怎样的?

事件传递:
我们点击屏幕产生触摸事件,系统将这个事件加入到一个由UIApplication管理的事件队列中,UIApplication会从消息队列里取事件分发下去,首先传给UIWindow
在UIWindow中就会调用hitTest:withEvent:方法去返回一个最终响应的视图
在hitTest:withEvent:方法中就会去调用pointInside: withEvent:去判断当前点击的point是否在UIWindow范围内,如果是的话,就会去遍历它的子视图来查找最终响应的子视图
遍历的方式是使用倒序的方式来遍历子视图,也就是说最后添加的子视图会最先遍历,在每一个视图中都回去调用它的hitTest:withEvent:方法,可以理解为是一个递归调用
最终会返回一个响应视图,如果返回视图有值,那么这个视图就作为最终响应视图,结束整个事件传递;如果没有值,那
么就会将UIWindow作为响应者
视图响应:
如果view的控制器存在,就传递给控制器处理;如果控制器不存在,则传递给它的父视图
在视图层次结构的最顶层,如果也不能处理收到的事件,则将事件传递给UIWindow对象进行处理
如果UIWindow对象也不处理,则将事件传递给UIApplication对象
如果UIApplication也不能处理该事件,则将该事件丢弃

UITableView优化方案?

本质上是降低 CPU、GPU 的工作,从这两个大的方面去提升性能。
CPU:对象的创建和销毁、对象属性的调整、布局计算、文本的计算和排版、图片的格式转换和解码、图像的绘制
GPU:纹理的渲染

ViewController的生命周期?

当一个视图控制器被创建,并在屏幕上显示的时候。 代码的执行顺序
1、 alloc 创建对象,分配空间
2、init (initWithNibName) 初始化对象,初始化数据
3、loadView 载入视图
4、viewDidLoad 载入完成,可以进行自定义数据以及动态创建其他控件
5、viewWillAppear 视图将出现在屏幕之前,马上这个视图就会被展现在屏幕上了
6、viewDidAppear 视图已在屏幕上渲染完成

当一个视图被移除屏幕并且销毁的时候的执行顺序,这个顺序差不多和上面的相反
1、viewWillDisappear 视图将被从屏幕上移除之前执行
2、viewDidDisappear 视图已经被从屏幕上移除,用户看不到这个视图了
3、dealloc 视图被销毁,将创建的对象进行释放

什么是离屏渲染,如何避免离屏渲染?

GPU渲染机制:
CPU 计算好显示内容提交到 GPU,GPU 渲染完成后将渲染结果放入帧缓冲区,随后视频控制器会按照 VSync 信号逐行读取帧缓冲区的数据,经过数模转换传递给显示器显示。

GPU屏幕渲染有以下两种方式:

On-Screen Rendering意为当前屏幕渲染,指的是GPU的渲染操作是在当前用于显示的屏幕缓冲区中进行。

Off-Screen Rendering意为离屏渲染,指的是GPU在当前屏幕缓冲区以外新开辟一个缓冲区进行渲染操作。

离屏渲染的触发方式
圆角、遮罩、阴影、光栅化等会触发离屏渲染,模拟器Color OffScreen Render进行检查。

上一篇 下一篇

猜你喜欢

热点阅读