1. UIView
和 CALayer
是什么关系?
UIView
:用户交互、界面展示。真正绘制的界面的类是Layer
。CALayer
属于QuartzCore
框架(跨平台的)。mac os
:交互上面:APPKIT
,通过鼠标键盘交互,NSView
。相同点:同一种绘制方式(CALayer
)。
-
UIView
和CALayer
算是相互补充的关系。 -
UIView
=CALayer.delegate
-
UIView
: 负责用户的交互事件。 -
CALayer
: 负责图像和动画的渲染
总结:UIView
负责处理用户交互,CALayer
负责绘制内容,每个View
都有一个Layer
。我们访问和设置的这些负责显示的属性实际上就是访问和设置了Layer
对应的属性,只不过UIView
把它封装了起来。
- 为什么要基于
UIView
和CAlayer
提供2个平行的层级关系?
1、职责分离:UIView
处理UI
交互,CALayer
处理内容绘制和动画;
2、代码公用:在iOS
和macOS 2
个平台上,事件和UI 交互有许多不同点,基于触控和鼠标键盘交互有本质的区别;故针对不同的平台,UI 交互这些代码做不同的处理,而内容绘制和动画这些代码可以复用。
2. LoadView
方法了解吗?
- 自定义控制器的
View
。可以在这个方法中做一些个性化的设置
2. 控制器 View
的生命周期,一旦收到内存警告会如何处理?
当系统内存告急时,会接收到didReceiveMemoryWarning
。 这是属于 ViewController
的方法,当ViewController
接收到didReceiveMemoryWarning
,首先会判断当前的 ViewController
是否还显示在window
上,如果不在就会移除当前的ViewController
,销毁ViewController
上面的子控件,并执行 ViewDidUnload
方法。
3. setNeedsDisplay
和 layoutIfNeeded
两者是什么关系?
setNeedsDisplay
是给当前的视图做了标记。
layoutIfNeeded
查找是否有标记,如果有标记及立刻刷新。
只有这二者合起来使用,才会起到立刻刷新的效果。