说到view的生命周期一般都是指视图控制器的view生命周期。
首先判断控制器是否有视图,如果没有就调用loadView方法创建。过程如下:红色虚线框可以忽略,一般不会用。
生命周期如下:
1. loadView:
视图控制器(UIViewController)及其子类,无论是手写代码还是storyboard、xib肯定会调用此方法(此方法的调用是懒加载的)。其它的视图不会调用比如UIButton,UILabel等,因为他们不是视图控制器。
- Storyboard/XIB会调用的方法:
initWithCoder
awakeFromNib:此时frame还没有完成。
- 手写代码调用的代码(必须是UIView比如自定义MDDButton : UIButton)
initWithCoder
- (instancetype)initWithFrame:(CGRect)frame.创建时init方法会默认调用此方法,不过frame为0.除非显示调用此方法,frame才会有值,比如:[[MDDButton alloc] initWithFrame:CGRectMake(10, 10, 100, 40)];这样显示的调用frame不为0。
2 -viewDidLoad
加载到内存完成后会调用此函数,在视图切换中,只要控制器不从内存中移除此方法就不会被调用。一般在此方法中添加一些子控件,设置视图的初始属性等等,类似初始化。
3 -viewWillAppear
即将加载到窗口时调用此方法。一般在此方法做一些较为耗时的。这样就可以先显示基本的视图,呈现给用户(让用户感觉不是那么卡),然后再显示比较耗时的。以免显示一个白屏给用户。
4 -viewDidAppear
视图已经加载到窗口时调用。
以下:
viewWillDisappear-视图即将消失、被覆盖或是隐藏时调用;
viewDidDisappear-视图已经消失、被覆盖或是隐藏时调用;
viewVillUnload-当内存过低时,需要释放一些不需要使用的视图时,即将释放时调用;
viewDidUnload-当内存过低,释放一些不需要的视图时调用。