UIViewController的生命周期

来源:互联网 发布:java专业入门课程 编辑:程序博客网 时间:2024/06/05 14:40

测试环境 xcode 6.3  Storyboard ios 8.3

测试详情:由一个controller push到下一个controller 然后返回 控制器中方法的执行。(controller 1 c1  controlelr 2  c2)

C1为程序入口

测试结果:

执行顺序:  

 1. C1   initWithCoder: 初始化方法;

2. C1   loadView    从nib载入视图 ,通常这一步不需要去干涉。除非你没有使用xib文件创建视图

3.C1 viewDidLoad  载入完成,可以进行自定义数据以及动态创建其他控件

4. C1 viewWillAppear:   视图将出现在屏幕之前,马上这个视图就会被展现在屏幕上了

5. C1 viewDidAppear:   视图已在屏幕上渲染完成

触发push事件后

6. C2 initWithCoder: 初始化方法;

7.  C2   loadView 从nib载入视图 ,通常这一步不需要去干涉。除非你没有使用xib文件创建视图

8.C2 viewDidLoad 载入完成,可以进行自定义数据以及动态创建其他控件

9.C1  viewWillDisappear: 视图将被从屏幕上移除之前执行

10.C2  viewWillAppear:  视图将出现在屏幕之前,马上这个视图就会被展现在屏幕上了

11. C1  viewDidDisappear:   视图已经被从屏幕上移除,用户看不到这个视图了

12.C2  viewDidAppear:  视图已在屏幕上渲染完成

点击返回跟视图控制器后:

13. C2 viewWillDisappear: 视图将被从屏幕上移除之前执行

14. C1 viewWillAppear:  视图将出现在屏幕之前,马上这个视图就会被展现在屏幕上了

15 C2 viewDidDisappear:  视图已经被从屏幕上移除,用户看不到这个视图了

16 C1  viewDidAppear:  视图已在屏幕上渲染完成

其中Viewcontroller 为C1 TestViewController为 C2.

- (void)viewDidLoad;

     一个APP在载入时会先通过调用loadView方法或者载入IB中创建的初始界面的方法,将视图载入到内存中。然后会调用viewDidLoad方法来进行进一步的设置。通常,我们对于各种初始数据的载入,初始设定等很多内容,都会在这个方法中实现,所以这个方法是一个很常用,很重要的方法。

      但是要注意,这个方法只会在APP刚开始加载的时候调用一次,以后都不会再调用它了,所以只能用来做初始设置。

- (void)viewWillAppear:(BOOL)animated;

      系统在载入所有数据后,将会在屏幕上显示视图,这时会先调用这个方法。通常我们会利用这个方法,对即将显示的视图做进一步的设置。例如,我们可以利用这个方法来设置设备不同方向时该如何显示。

      另外一方面,当APP有多个视图时,在视图间切换时,并不会再次载入viewDidLoad方法,所以如果在调入视图时,需要对数据做更新,就只能在这个方法内实现了。所以这个方法也非常常用。

- (void)viewDidAppear:(BOOL)animated;

      有时候,由于一些特殊的原因,我们不能在viewWillApper方法里,对视图进行更新。那么可以重写这个方法,在这里对正在显示的视图进行进一步的设置。

- (void)viewWillDisappear:(BOOL)animated;

      在视图变换时,当前视图在即将被移除、或者被覆盖时,会调用这个方法进行一些善后的处理和设置。

      由于在IOS4之后,系统允许将APP在后台挂起,所以在按了Home键之后,系统并不会调用这个方法,因为就这个APP本身而言,APP显示的view,仍是挂起时候的view,所以并不会调用这个方法。

 - (void)viewDidDisappear:(BOOL)animated;

      我们可以重写这个方法,对已经消失,或者被覆盖,或者已经隐藏了的视图做一些其他操作。

Phone开发必不可少的要用到这两个方法。 他们都可以用来在视图载入的时候,初始化一些内容。 但是他们有什么区别呢?

viewDidLoad 此方法只有当view从nib文件初始化的时候才被调用。

loadView 此方法在控制器的view为nil的时候被调用。 此方法用于以编程的方式创建view的时候用到。 如:

  1.  
  2. - ( void ) loadView {
  3.     UIView *view = [ [ UIView alloc] initWithFrame:[ UIScreen
  4. mainScreen] .applicationFrame] ;
  5.     [ view setBackgroundColor:_color] ;
  6.     self.view = view ;  

你在控制器中实现了loadView方法,那么你可能会在应用运行的某个时候被内存管理控制调用。 如果设备内存不足的时候, view 控制器会收到didReceiveMemoryWarning的消息。 默认的实现是检查当前控制器的view是否在使用。如果它的view不在当前正在使用的view hierarchy里面,且你的控制器实现了loadView方法,那么这个view将被release, loadView方法将被再次调用来创建一个新的view。


0 0
原创粉丝点击