生命周期
init
—> loadView
—> viewDidLoad
—>viewWillAppear
—> viewWillLayoutSubviews
—> viewDidLayoutSubviews
—>viewDidAppear
—> viewWillDisappear
—> viewDidDisappear
init
—> loadView
—> viewDidLoad
—>viewWillAppear
—> viewWillLayoutSubviews
—> viewDidLayoutSubviews
—>viewDidAppear
—> viewWillDisappear
—> viewDidDisappear
—>接收到内存警告
—>viewWillUnload
—> viewDidUnload
1. init(init 法中初始化ViewController本身)
应该只有相关数据的初始化,而且这些数据是比较关键的数据。
init方法中实例化必要的对象(遵从LazyLoad思想)
2. loadView(controller的view为nil时调用,初始化view)
view 控制器默认会注册memory warning notification。
当第一次使用控制器的view时,会调用loadView方法创建view,一般在这里自定义view(如手动创建自己的视图,那么应该覆盖这个方法并将它们赋值给试图控制器的 view 属性);
视图控制器自带的视图并不是视图控制器一创建就马上创建的,而是被访问时才创建即自动调用loadView,这个方法返回时视图就创建好了
- (void)loadView{
//self.view.backgroundColor = [UIColor greenColor];//这时候view还没创建,程序会崩
[super loadView];
//loadView返回之后,view创建好了
self.view.backgroundColor = [UIColor greenColor];
}
3. viewDidLoad(view 从nib文件初始化)
当控制器的view创建完毕时会调用(视图控制器自带的视图创建完就会自动调用这个方法),也就是在loadView后调用,一般在这里添加子控件、初始化数据。
只有在视图控制器将其视图载入到内存之后才调用该方法,这是执行任何其他初始化操作的入口
4. viewWillAppear(页面即将被显示)
当试图将要添加到窗口中并且还不可见的时候或者上层视图移出图层后本视图变成顶级视图时调用该方法。一般在View被添加到superView之前,切换动画之前调用。在这里进行一些显示前的处理。比如键盘弹出、一些特殊的动画(比如状态条和navbar的颜色)、改变视图方向等的操作。
5. viewWillLayoutSubviews(将要布局控制器View的子控件时调用)
一般用于显示前,对子控件进行布局。
6. viewDidLayoutSubviews(布局控制器View的子控件完成时调用)
子控件布局完成,可以在这里对子控件进行一些初始化。
7. viewDidAppear(已经出现)
当视图添加到窗口中以后或者上层视图移出图层后本视图变成顶级视图时调用,用于放置那些需要在视图显示后执行的代码。
8. viewWillDisappear(即将消失)
9. viewDidDisappear(已经消失)
10. viewWillUnload
11. viewDidUnload(当控制器的view因为内存警告被销毁时调用)
- 在这里应该将那些不再显示的View释放掉。
- 当viewcontroller的任何view 没有用的时候,viewDidUnload会被调用,在这里实现将retain 的view release,如果是retain的IBOutlet view 属性则不要在这里release,IBOutlet会负责release
- 一般在这里回收跟界面相关的资源(界面都会销毁了,跟界面相关的资源肯定不要了)
- 当视图控制器从内存释放自己的方法的时候调用,用于清除那些可能已经在试图控制器中创建的对象
12. dealloc(页面销毁)
13. didReceiveMemoryWarning
当应用程序接收到系统的内容警告时,就有可能调用控制器的didReceiveMemoryWarning方法。
它的默认做法是:当控制器的view不在窗口上显示时,就会直接销毁,并且调用viewDidUnload方法