一:UITableview
1重用机制
2数据源同步问题(新闻、咨询类app当中常见)
1)
并发访问数据拷贝(cpu负担重)2)
串行访问(可能会有延时)3UI事件传递&相应
1) UIView和CALayer:(单一职责原则)
UIView负责提供内容,处理触摸事件并参与响应链
CALayer只负责显示内容contents。
2)事件传递
-(UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event;//返回响应事件的视图
-(BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event;//判断点击的位置是否在当前视图范围内
hitTest:WithEvent的流程图视图的响应链机制和流程
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event;
-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event;
-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event;
如果最终没有处理,则忽略此事件4图像显示原理
各自的分工 cpu的主要工作内容 GPU/OPENGL渲染管线5UI卡顿、掉帧的原因以及解决方案
1)原因:
在16.7ms内,cpu和gpu没有准备好下一帧的画面绘制就会造成卡顿2)滑动优化方案
CPU方案:
对象创建、调整、销毁
预排版(布局计算、文本计算)
预渲染(文本等异步绘制、图片编解码等)
GPU方案:
纹理渲染*
视图混合*
6 UI绘制原理&异步绘制
1)UI绘制原理
UIView的绘制流程 系统绘制流程2)异步绘制
异步绘制流程7 离屏渲染问题(GPU)
On-Screen Rendering
当前屏幕渲染,GPU的渲染操作是在当前用于显示的屏幕缓冲区中进行
Off-Screen Rendering
离屏渲染,GPU在当前屏幕缓冲区以外新开辟一个缓冲区进行渲染操作
何时会触发?
·圆角(当和maskToBounds一起使用时)
·图层蒙版
·阴影
·光栅化
为何要避免离屏渲染?
·会增加GPU的工作量,可能导致GPU和CPU的工作时间超过16.7ms造成UI卡顿和掉帧现象。
页面性能优化方案(转载)
https://blog.ibireme.com/2015/11/12/smooth_user_interfaces_for_ios/
网友评论