36_iOS控制器的生命周期&view的创建
一,VC的生命周期
1,一般过程:
非storyboard走initWithNibName (storyboard走initWithCoder) ->awakeFromNib(各种视图层加载完毕)
-> loadView (此时才能进行视图操作)-> viewDidLoad -> viewWillAppear -> viewWillLayoutSubviews -> viewDidLayoutSubviews -> viewDidAppear -> viewWillDisappear -> viewDidDisappear ->dealloc ->didReceiveMemoryWarning
注意:
- 1,控制器view是通过懒加载的方式进行加载的,即用到的时候再加载;
- 2,当我们用到控制器view时,就会调用控制器view的get方法,在get方法内部,首先判断view是否已经创建,如果已存在,则直接返回存在的view,如果不存在,则调用控制器的loadView方法,在控制器没有被销毁的情况下,loadView也可能会被执行多次
- 3,storyboard加载的是控制器及控制器view,而xib加载的仅仅只是控制器的view
2,图示
二,控制器view的创建
1,纯代码创建
2,storyboard创建
- 1,重写loadView方法,需要
- 2,[super loadView]首先判断是否指定storyboard或者xib,如果指定,
- 就可以帮助加载控制器view;如果没有指定,loadView也会帮助创建,只不过创建的是空
- 3,loadView里边不要写[super loadView]
3,xib创建
1loadView方法的应用场景:
1,一开始就想展示一张图片,可以直接让控制器的view是UIImageView;
2UIWebView:展示网页;
2,重写loadView的作用:减少内存使用,直接创建控制器最需要的view
3,initWithNibName的底层实现:
- 1,判断nibName有没有值,如果没有,就会执行以下几步;
- 2,寻找有没有XMGView.xib,有就直接帮忙加载
- 3,寻找有没有XMGViewController.xib,有就直接加载;
- 4,都没有,就创建一个空的view:空的view不是透明(alpha = 0),若是透明,则可以操作
- 而是几乎透明,为clearColor能看到里边窗口的控件,却不能操作内部控件
- 5,init底层会调用initWithName