1.系统的UI事件传递机制是怎样的?
//主要考察的是hitTest和pointInside这样的一个系统的内部实现。
当点击了屏幕,点击事件传递给UIApplication - UIWindow -在UIWindow里面会判断hitTest,来返回最终的响应视图
内部实现
1.先判断是否可交互,是否隐藏以及是否透明
2.调用pointInside,判断当前点击的点是否在UIWindow范围内
是的话,倒序遍历UIWindow的子视图,来查找最终响应事件的视图
不是的话,返回UIWindow
2.使UITableView滚动更流畅的方案或者思路都有哪些?
关于性能优化方面的掌握程度,可以从CUP和GPU两方面回答这个问题
//我们可以分别对CPU和GPU做滑动优化
***CPU做了什么 - UI布局,文本计算,绘制,图片编解码***
可做的优化
-在子线程中进行对象的创建,调整和销毁
-在子线程中预排版(布局计算,文本计算)
-预渲染(图片的编解以及采用异步绘制方案等)
-让主线程有更多的时间去响应用户的交互
***GPU做了什么 - 图层合成,纹理渲染***
可做的优化
-纹理渲染方面的优化:避免离屏渲染
-避免设置视图的圆角属性(必须同时maskToBounds为YES才会触发)
-避免设置视图的图层蒙版
-避免设置阴影
-避免设置光栅化
-图层合成方面的优化:减少视图层级复杂度
3.什么是离屏渲染?
离屏渲染她的概念起源于GPU层面,在当前屏幕缓冲区以外新开辟一个缓冲区进行渲染操作。
4.UIView和CALayer之间的关系是怎样的?
UIView只负责事件传递及视图响应链的
CALayer只负责内容contents(UI视图)的显示工作
这些用到了六大设计原则中的 单一职责原则
ps:UI视图响应链
主要方法
touchesBegan
touchesMoved
touchesEnded
首先找到当前响应的view看它能否处理这个事件
view - 父视图 - UIApplicationDelegate - 事件被忽略