[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生命周期简单归纳

2014-05-04 11:52:03.461 TestLifecycle[3141:60b] [ViewController viewDidLoad] 2014-05-04 11:52:03.46...
  • qq232053394
  • qq232053394
  • 2014年05月04日 11:55
  • 1008

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

http://blog.csdn.net/liuyu1114/article/details/24971047 一、调用顺序: 1. + (id)alloc 分配内存; 2. -...
  • guojin08
  • guojin08
  • 2014年06月23日 21:37
  • 8412

UIViewController生命周期控制

一千个人眼里有一千个哈姆雷特, 如果不统一下, 每个程序员按照自己的习惯的代码风格去写, 会给维护造成了困扰,所以我们给UIViewController的申明周期中加上一些方法来规范下...
  • uxyheaven
  • uxyheaven
  • 2014年09月29日 17:06
  • 7480

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

一、调用顺序: 1. + (id)alloc 分配内存; 2. - (id)init 方法(包括其他-(id)init...方法),只允许调用一次,并且要与 alloc方法 写在一起,在i...
  • u010794950
  • u010794950
  • 2016年05月05日 17:00
  • 229

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

转载自:http://blog.csdn.net/weisubao/article/details/39620795 (1)视图控制图可以理解成有两部分,有一个部分是控制的,还有一部分是视图...
  • yuxikuo_1
  • yuxikuo_1
  • 2014年12月24日 23:48
  • 3596

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

视图控制器之间的切换方式之一是,presentViewController和dismissViewControllerAnimated,也就是类似于”点击进入下一层,返回进入上一层“这种调转切换,前一...
  • wsb200514
  • wsb200514
  • 2014年09月27日 23:33
  • 4577

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

UIViewController的生命周期及iOS程序执行顺序
  • RainShenJi
  • RainShenJi
  • 2015年01月25日 18:14
  • 373

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

当一个视图控制器被创建,并在屏幕上显示的时候。 代码的执行顺序 1、 alloc                                   创建对象,分配空间 2、init (initW...
  • zx6268476
  • zx6268476
  • 2015年04月17日 13:18
  • 1188

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

当一个视图控制器被创建,并在屏幕上显示的时候。 代码的执行顺序 1、 alloc                                   创建对象,分配空间 2、init (initW...
  • u011870225
  • u011870225
  • 2016年06月01日 00:58
  • 85

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

UIViewController的生命周期及iOS程序执行顺序 当一个视图控制器被创建,并在屏幕上显示的时候。 代码的执行顺序 1、 alloc                        ...
  • HSMonkeyProgrammer
  • HSMonkeyProgrammer
  • 2016年03月16日 11:18
  • 236
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:[iOS]UIViewController生命周期简单归纳
举报原因:
原因补充:

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