当前位置: 首页 > news >正文

ios开发 -- 八股 -- UI视图

UITableView

重用机制

包含三个方法:从重用池中取出可重用的View,向其中添加一个View,将当前使用的视图移动到可重用队列中

包含两个队列:等待使用的队列以及正在使用的队列

重用池通过懒加载的方式进行初始化

在使用的时候,如果池子里面没有组件,就创建一个,然后添加到池子里面

数据源同步

UI操作一般都是在主线程中进行,但是LoadMore一般都是在子线程中进行,我们如何进行数据同步

1. 并发访问,数据拷贝

在主线程删除数据的时候进行记录,在子线程要同步UI之前进行同步删除操作

2. 串行访问

当主线程要删除数据的时候,在串行队列中执行,然后等待一会,进行reload UI

UIView和CALayer

UIView为CALayer提供内容,以及负责处理触摸等事件,参与响应链

CALayer知识负责内容的显示

体现了单一职责原则

事件传递和视图响应链

这两个方法一个获取点击的视图,另一个判断点击位置是否在视图内部

事件传递流程如下

视图事件响应包含三个方法

在事件处理的传递上,如果一直不处理,就会一直向上传递,直到传递到UIapplicationdelecate,如果不处理,就会忽略这个事件

图像显示原理

CPU完成UI布局,文本计算和绘制,然后提交给GPU

GPU渲染管线:顶点着色,图源装配,光栅化,片段着色,片段处理,然后提交给FrameBuffer

UI卡顿和掉帧的原因

就是在下一帧到来之前,CPU和GPU没有完成画面的准备

滑动优化方案

基于CPU:将对象创建,调整,销毁放到子线程,预排版,预渲染

基于GPU:纹理渲染(避免离屏),视图混合:减少层级

UIview的绘制原理

会在一个事件的结束阶段进行绘制

使用【CALayer display】来进行绘制,这个方法会检测是否重写了displayLayer,如果没有,就进入系统绘制流程

离屏渲染

指的是当我们设置UI某些图层的属性,在未预合成之前,不能用于直接显示的时候,GPU在当前屏幕缓冲区以外开辟一个缓冲区进行渲染操作

何时会触发

圆角 + maskToBounds

图层蒙版

阴影

光栅化

为什么要避免:增加来GPU的工作量,可能导致掉帧

http://www.dtcms.com/a/340780.html

相关文章:

  • 51单片机与stm32单片机,先学习哪一个?
  • 牛津大学xDeepMind 自然语言处理(3)
  • 翻译记忆库(TMX)与机器翻译的结合应用
  • 【国内电子数据取证厂商龙信科技】隐私增强技术
  • 论函数指针
  • 深入分析Linux kobject 的工作原理与实现机制
  • 【C语言16天强化训练】从基础入门到进阶:Day 4
  • K8S-Pod资源对象——Pod探针
  • 基于深度学习CenterPoint的3D目标检测部署实战
  • MySQL的简单介绍
  • PyTorch API 5
  • 通过uniapp将vite vue3项目打包为android系统的.apk包,并实现可自动升级功能
  • PyTorch API 7
  • PiscCode集成Hand Landmarker:实现高精度手部姿态检测与分析
  • 查看文件内容
  • kotlin 协程笔记
  • 手机 浏览器调用摄像头扫描二维码Quagga
  • RAG系统文本检索优化:Cross-Encoder与Bi-Encoder架构技术对比与选择指南
  • 时序数据库IoTDB的列式存储引擎
  • 5G-A赋能AR眼镜:毫米级虚实融合的未来已来
  • Kubernetes 负载均衡现象解析:为何同一批次请求集中于单个 Pod
  • 小红书账号隔离:解决IP关联问题方案
  • AI 创业公司分析报告:RealRoots
  • 结合SAT-3D,运动+饮食双重养腰新方式
  • 3ds Max 流体模拟终极指南:从创建到渲染,打造真实液体效果
  • MySQL InnoDB事务acid特性的原理和隔离级别的实现原理
  • 机器学习——附录与补充
  • 【007TG洞察】Bitget全球快闪店活动解析:Web3项目如何实现高效用户增长
  • ios八股文 -- Objective-c
  • Java EE ----- Spring Boot 日志