(1)并发访问,数据拷贝 例如:在列表删除一个cell数据,同时还有一个loadmore加载,那么就需要先记录删除的数据,在加载完成后再判断一次,删除已经删除的数据。 (2)串行访问
数据源同步-串行访问
事件传递:UIApplication->UIWindow->viewcontroller->view->subviews 事件响应:subviews->view->viewcontroller->UIWindow->UIApplication->没有响应者就抛弃
事件传递
图像显示原理1
CPU工作: Layout:UI布局计算、文本计算 Display:绘制drawRect方法 Prepare:图片编解码,UIImage是不能直接显示的需要先解码 Commit:提交位图给GPU处理
CPU显示原理
GPU显示原理
(1)卡顿掉帧原因: 在规定的16.7毫秒内,在下一帧到来前CPU、GPU没有共同完成下一帧图像,就会出现卡顿和掉帧
image
(2)解决 CPU层级以下在子线程中完成:
GPU层级
(1)UIView的绘制原理: 调用setNeedsDislay时候,(实际上是这个view的layer调用setNeedsDisplay方法,之后相当于在这个layer上打上一个脏标记),然后并没有立即发生当前视图的绘制工作,而是在当前runloop快要结束的时候调用CALayer的display方法,进入到当前视图真正的绘制工作的流程当中。 原因是由于要减少绘制次数,提升性能,所以要在当前runloop快要结束的时候调用CALayer的display方法。
绘制原理
(2)系统绘制流程 [UIView drawRect:]是系统开给我们的异步绘制口子,让我们可以做一些操作。
系统绘制流程
(3)异步绘制原理 通过子线程的切换,借助Global queue,在子线程中进行位图的绘制,此时主线程可以做其它的工作。等子线程绘制位图完毕,再回到主队列中提交位图,设置给CALayer的contents属性,完成一个UI控件的异步绘图过程。
异步绘制原理
离屏渲染意思是在当前屏幕缓冲区外,创建了一个新的缓冲区,使得GPU触发了openGL的多通道渲染管线,产生了额外开销。可能造成CPU+GPU在一帧的时间内无法完成对应操作,造成卡顿和掉帧。 (1)常见触发场景
(2)离屏渲染导致卡顿掉帧原理 离屏渲染是发生在GPU层面,使得GPU触发了OpenGL的多通道渲染管线,产生了额外的开销。
(3)UITableView等列表滑动优化 CPU层面