前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >iOS面试问题总结

iOS面试问题总结

作者头像
用户6094182
发布2020-11-04 10:17:24
5930
发布2020-11-04 10:17:24
举报
文章被收录于专栏:joealzhoujoealzhou

一、UI视图相关

1、UITableView数据源同步

(1)并发访问,数据拷贝 例如:在列表删除一个cell数据,同时还有一个loadmore加载,那么就需要先记录删除的数据,在加载完成后再判断一次,删除已经删除的数据。 (2)串行访问

数据源同步-串行访问

2、事件传递、事件响应

事件传递:UIApplication->UIWindow->viewcontroller->view->subviews 事件响应:subviews->view->viewcontroller->UIWindow->UIApplication->没有响应者就抛弃

事件传递

3、图像显示原理

图像显示原理1

CPU工作: Layout:UI布局计算、文本计算 Display:绘制drawRect方法 Prepare:图片编解码,UIImage是不能直接显示的需要先解码 Commit:提交位图给GPU处理

CPU显示原理

GPU显示原理

4、UI卡顿掉帧

(1)卡顿掉帧原因: 在规定的16.7毫秒内,在下一帧到来前CPU、GPU没有共同完成下一帧图像,就会出现卡顿和掉帧

image

(2)解决 CPU层级以下在子线程中完成:

  • 对象的创建、调整、销毁
  • 预排版(布局计算,文本计算)
  • 预渲染(文本等异步绘制,图片编解码)

GPU层级

  • 纹理渲染:避免离屏渲染、依托CPU异步绘制减轻GPU压力
  • 减少视图层级
5、异步绘制

(1)UIView的绘制原理: 调用setNeedsDislay时候,(实际上是这个view的layer调用setNeedsDisplay方法,之后相当于在这个layer上打上一个脏标记),然后并没有立即发生当前视图的绘制工作,而是在当前runloop快要结束的时候调用CALayer的display方法,进入到当前视图真正的绘制工作的流程当中。 原因是由于要减少绘制次数,提升性能,所以要在当前runloop快要结束的时候调用CALayer的display方法。

绘制原理

(2)系统绘制流程 [UIView drawRect:]是系统开给我们的异步绘制口子,让我们可以做一些操作。

系统绘制流程

(3)异步绘制原理 通过子线程的切换,借助Global queue,在子线程中进行位图的绘制,此时主线程可以做其它的工作。等子线程绘制位图完毕,再回到主队列中提交位图,设置给CALayer的contents属性,完成一个UI控件的异步绘图过程。

异步绘制原理

6、离屏渲染

离屏渲染意思是在当前屏幕缓冲区外,创建了一个新的缓冲区,使得GPU触发了openGL的多通道渲染管线,产生了额外开销。可能造成CPU+GPU在一帧的时间内无法完成对应操作,造成卡顿和掉帧。 (1)常见触发场景

  • 圆角(必须要和maskToBounds一起使用时才会触发)
  • 光栅化(shouldRasterize)
  • 阴影(shadow)
  • 图层蒙版(mask)
  • group opacity(组透明度)
  • UIBlurEffect(毛玻璃)

(2)离屏渲染导致卡顿掉帧原理 离屏渲染是发生在GPU层面,使得GPU触发了OpenGL的多通道渲染管线,产生了额外的开销。

  • 创建新的渲染缓冲区 增加了内存的开销,包括上下文切换,因为有多通道渲染管线,需要把多通道的渲染结果做一个最终的合成,就需要上下文切换,这就造成了GPU额外的开销。
  • 离屏渲染增加了GPU的工作量,使得CPU+GPU的工作时间超出了16.7ms的总耗时,可能会导致UI的卡顿和掉帧。

(3)UITableView等列表滑动优化 CPU层面

  • 对象创建销毁调整在子线程中完成、视图位置计算文本计算、图片的编解码、异步绘制、减少视图层级 GPU
  • 避免离屏渲染
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、UI视图相关
    • 1、UITableView数据源同步
      • 2、事件传递、事件响应
        • 3、图像显示原理
          • 4、UI卡顿掉帧
            • 5、异步绘制
              • 6、离屏渲染
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档