画面跳转各方法调用的时机-init、viewDidLoad、viewWillAppear、viewDidAppear、viewWillDisappear、viewDidDisappear

init:方法

在init方法中实例化必要的对象(遵从LazyLoad思想)

init方法中初始化ViewController本身


 

loadView:方法

这是当没有正在使用nib视图页面,子类将会创建自己的自定义视图层。绝不能直接调用。

如果手工维护views,必须重载重写该方法。

当view需要被展示而它却是nil时,viewController会调用该方法。

loadView和IB构建view

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

 

viewDidLoad:方法

在视图加载后被调用:

如果是在代码中创建的视图加载器,他将会在loadView方法后被调用;

如果是从nib视图页面输出,他将会在视图设置好后后被调用。

重载重写该方法以进一步定制view

在iPhone OS 3.0及之后的版本中,还应该重载重写viewDidUnload来释放对view的任何索引

viewDidLoad后调用数据Model


viewWillAppear: 方法
Called when the view is about to made visible. Default does nothing
视图即将可见时调用。默认情况下不执行任何操作


viewDidAppear: 
Called when the view has been fully transitioned onto the screen. Default does nothing
视图已完全过渡到屏幕上时调用


viewWillDisappear:
Called when the view is dismissed, covered or otherwise hidden. Default does nothing
视图被驳回时调用,覆盖或以其他方式隐藏。默认情况下不执行任何操作


viewDidDisappear:
Called after the view was dismissed, covered or otherwise hidden. Default does nothing
视图被驳回后调用,覆盖或以其他方式隐藏。默认情况下不执行任何操作


 

下面这个是引用的网上一个哥们的总结,链接:http://blog.csdn.net/weasleyqi/article/details/8090373

执行顺序:

 从程序的log来看:

2012-10-19 15:51:44.811inHyron[483:b903] init

2012-10-19 15:51:54.081inHyron[483:b903] viewDidLoad

2012-10-19 15:51:54.082inHyron[483:b903] viewVillAppear

2012-10-19 15:51:54.084 inHyron[483:b903] viewDidAppear

很明显,先执行init、然后执行viewDidLoad,然后是viewWillAppear最后是viewDidAppear,这样视图就创建好了,当视图消失或者被覆盖的时候:

2012-10-19 15:54:14.557inHyron[483:b903] viewWillDisappear

2012-10-19 15:54:14.558inHyron[483:b903] viewDidDisappear

这样一来视图就消失了,当模拟内存警告的时候:

2012-10-19 15:55:14.333inHyron[483:b903] Received simulated memory warning.

2012-10-19 15:55:14.334inHyron[483:b903] viewWillUnload

2012-10-19 15:55:14.335 inHyron[483:b903]viewDidUnload

从log可以看出,当视图控制对象收到内存警告的时候,程序会执行viewWillUnload最后是执行viewDidUnload。

这样,一套的流程就完成了.

以上就是这个哥们的总结,链接:http://blog.csdn.net/weasleyqi/article/details/8090373

其实当视图A切换到视图B的真正的流程并不是按上面的流程跑下来的,

并不是A视图:1,viewWillDisappear 2,viewDidDisappear,然后B视图:3,viewDidLoad 4,viewVillAppear 5,viewDidAppear这样。

正确的顺序流程应该是:

1,B视图 viewDidLoad

2,A视图 viewWillDisappear

3,B视图 viewVillAppear

4,A视图 viewDidDisappear

5,B视图 viewDidAppear

如图所示


posted @ 2015-08-14 12:00  lisen_李森  阅读(866)  评论(0编辑  收藏  举报