[iOS]UIViewController生命周期简单归纳

转载 2015年07月07日 17:51:08
http://blog.csdn.net/liuyu1114/article/details/24971047

一、调用顺序:

1. + (id)alloc 分配内存;

2. - (id)init 方法(包括其他-(id)init...方法),只允许调用一次,并且要与 alloc方法 写在一起,在init方法中申请的内存,要在dealloc方法中释放(或者其他地方);

3. - (void)awakeFromNib 使用Xib初始化后会调用此方法,一般不会重写此方法;

4. - (void)loadView 如果使用Xib创建ViewController,就不要重写该方法。一般不会修改此方法;

5. - (void)viewDidLoad 视图加载完成之后被调用,这个方法很重要,可以在此增加一些自己定义的控件,注意此时view的frame不一定是显示时候的frame,真实的frame会在 - (void)viewDidAppear: 后。
在iOS6.0+版本中在对象的整个生命周期中只会被调用一次,
这里要注意在iOS3.0~iOS5.X版本中可能会被重复调用,当ViewController收到内存警告后,会释放View,并调用viewDidUnload,之后会重新调用viewDidLoad,所以要支持iOS6.0以前版本的童鞋要注意这里的内存管理。
6. - (void)viewWillAppear:(BOOL)animated view 将要显示的时候,可以在此加载一些图片,和一些其他占内存的资源;
7. - (void)viewDidAppear:(BOOL)animated view 已经显示的时候;

8. - (void)viewWillDisappear:(BOOL)animated view 将要隐藏的时候,可以在此将一些占用内存比较大的资源先释放掉,在 viewWillAppear: 中重新加载。如:图片/声音/视频。如果View已经隐藏而又在内存中保留这些在显示前不会被调用的资源,那么App闪退的几率会增加,尤其是ViewController比较多的时候;

9. - (void)viewDidAppear:(BOOL)animated view 已经隐藏的时候;

10. - (void)dealloc,不要手动调用此方法,当引用计数值为0的时候,系统会自动调用此方法。



二、使用 NavigationController 去 Push 切换显示的View的时候,调用的顺序:

例如 从 A 控制器 Push 显示 B 控制器,

[(A *)self.navigationController pushViewController:B animated:YES]

1. 加载B控制器的View(如果没有的话);

2. 调用 A 的 - (void)viewWillDisappear:(BOOL)animated;

3. 调用 B 的 - (void)viewWillAppear:(BOOL)animated;

4. 调用 A 的 - (void)viewDidDisappear:(BOOL)animated;

5. 调用 B 的 - (void)viewDidAppear:(BOOL)animated;

总结来说,ViewController 的切换是先调用 隐藏的方法,再调用显示的方法;先调用Will,再调用Did。


三、重新布局View的子View

- (void)viewWillLayoutSubviews

- (void)viewDidLayoutSubviews
看字面意思就知道这两个方法是在View对他的子View进行布局的时候会被调用,包括View 显示/隐藏/屏幕旋转 的时候都会被调用。

如果设计的应用需要支持多方向可以在这里面进行一些UI的横竖屏适配。


打印附录:

2014-05-04 11:52:03.461 TestLifecycle[3141:60b] [ViewController viewDidLoad]

2014-05-04 11:52:03.463 TestLifecycle[3141:60b] [ViewController viewWillAppear:]

2014-05-04 11:52:03.464 TestLifecycle[3141:60b] [ViewController viewWillLayoutSubviews]

2014-05-04 11:52:03.465 TestLifecycle[3141:60b] [ViewController viewDidLayoutSubviews]

2014-05-04 11:52:03.516 TestLifecycle[3141:60b] [ViewController viewDidAppear:]

#Push一个新的ViewController : TestViewController

2014-05-04 11:52:07.219 TestLifecycle[3141:60b] [ViewController viewWillLayoutSubviews]

2014-05-04 11:52:07.220 TestLifecycle[3141:60b] [ViewController viewDidLayoutSubviews]

2014-05-04 11:52:07.298 TestLifecycle[3141:60b] [TestViewController viewDidLoad]

2014-05-04 11:52:07.299 TestLifecycle[3141:60b] [ViewController viewWillDisappear:]

2014-05-04 11:52:07.299 TestLifecycle[3141:60b] [TestViewController viewWillAppear:]

2014-05-04 11:52:07.303 TestLifecycle[3141:60b] [ViewController viewWillLayoutSubviews]

2014-05-04 11:52:07.303 TestLifecycle[3141:60b] [ViewController viewDidLayoutSubviews]

2014-05-04 11:52:07.304 TestLifecycle[3141:60b] [TestViewController viewWillLayoutSubviews]

2014-05-04 11:52:07.304 TestLifecycle[3141:60b] [TestViewController viewDidLayoutSubviews]

2014-05-04 11:52:07.806 TestLifecycle[3141:60b] [ViewController viewDidDisappear:]

2014-05-04 11:52:07.807 TestLifecycle[3141:60b] [TestViewController viewDidAppear:]

2014-05-04 11:52:07.807 TestLifecycle[3141:60b] [TestViewController viewWillLayoutSubviews]

2014-05-04 11:52:07.808 TestLifecycle[3141:60b] [TestViewController viewDidLayoutSubviews]

#在新的ViewController 中返回

2014-05-04 11:52:10.606 TestLifecycle[3141:60b] [TestViewController viewWillDisappear:]

2014-05-04 11:52:10.606 TestLifecycle[3141:60b] [ViewController viewWillAppear:]

2014-05-04 11:52:11.108 TestLifecycle[3141:60b] [TestViewController viewDidDisappear:]

2014-05-04 11:52:11.109 TestLifecycle[3141:60b] [ViewController viewDidAppear:]

相关文章推荐

iOS开发UIViewCOntroller视图控制器之间跳转切换举例,以及视图控制器生命周期的简单说明

转载自:http://blog.csdn.net/weisubao/article/details/39620795 (1)视图控制图可以理解成有两部分,有一个部分是控制的,还有一部分是视图...

【iOS开发】UIViewController的生命周期

一、UIViewController生命周期图二、UIViewController 生命周期详解1、 init 初始化controller,此时可以进行基本参数的初始化。 2、loadView ...

iOS UIViewController生命周期

一、调用顺序: 1. + (id)alloc 分配内存; 2. - (id)init 方法(包括其他-(id)init...方法),只允许调用一次,并且要与 alloc方法 写在一起,在init方...

iOS程序的执行顺序 和 UIViewController的生命周期

iOS程序的执行顺序 和 UIViewController的生命周期

UIViewController的生命周期及iOS程序执行顺序

当一个视图控制器被创建,并在屏幕上显示的时候。 代码的执行顺序 1、 alloc                               ...

UIViewController的生命周期及iOS程序执行顺序

当一个视图控制器被创建,并在屏幕上显示的时候。 代码的执行顺序 1、 alloc                               ...

UIViewController的生命周期及iOS程序执行顺序

当一个视图控制器被创建,并在屏幕上显示的时候。 代码的执行顺序 1、 alloc                               ...

UIViewController的生命周期及iOS程序执行顺序

当一个视图控制器被创建,并在屏幕上显示的时候。 代码的执行顺序 1、 alloc 创建对象,分配空间 2、init (initW...

UIViewController的生命周期及iOS程序执行顺序

当一个视图控制器被创建,并在屏幕上显示的时候。 代码的执行顺序 1、 alloc 创建对象,分配空间 2、init (initW...

UIViewController的生命周期及iOS程序执行顺序

转自:http://blog.csdn.net/huifeidexin_1/article/details/7566226 当一个视图控制器被创建,并在屏幕上显示的时候。 代码的执行顺序 1、 a...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)