[转]ios中页面跳转时各方法的调用时机

转载自:http://blog.csdn.net/itianyi/article/details/8598801

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

如图所示:

1466134572-2078-1361436718-2776

Leave a Reply

Your email address will not be published.