画面跳转各方法调用的时机-init、viewDidLoad、viewWillAppear、viewDidAppear、viewWillDisappear、viewDidDisappear
2015-08-14 12:00
537 查看
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
视图被驳回后调用,覆盖或以其他方式隐藏。默认情况下不执行任何操作
下面这个是引用的网上一个哥们的总结,链接:/article/1385951.html
执行顺序:
从程序的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。
这样,一套的流程就完成了.
以上就是这个哥们的总结,链接:/article/1385951.html
其实当视图A切换到视图B的真正的流程并不是按上面的流程跑下来的,
并不是A视图:1,viewWillDisappear 2,viewDidDisappear,然后B视图:3,viewDidLoad
4,[b]viewVillAppear 5,[b]viewDidAppear这样。[/b][/b]
正确的顺序流程应该是:
1,B视图 viewDidLoad
2,A视图 [b]viewWillDisappear[/b]
3,B视图 [b]viewVillAppear[/b]
4,A视图 [b]viewDidDisappear[/b]
5,B视图 [b]viewDidAppear[/b]
如图所示
在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
视图被驳回后调用,覆盖或以其他方式隐藏。默认情况下不执行任何操作
下面这个是引用的网上一个哥们的总结,链接:/article/1385951.html
执行顺序:
从程序的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。
这样,一套的流程就完成了.
以上就是这个哥们的总结,链接:/article/1385951.html
其实当视图A切换到视图B的真正的流程并不是按上面的流程跑下来的,
并不是A视图:1,viewWillDisappear 2,viewDidDisappear,然后B视图:3,viewDidLoad
4,[b]viewVillAppear 5,[b]viewDidAppear这样。[/b][/b]
正确的顺序流程应该是:
1,B视图 viewDidLoad
2,A视图 [b]viewWillDisappear[/b]
3,B视图 [b]viewVillAppear[/b]
4,A视图 [b]viewDidDisappear[/b]
5,B视图 [b]viewDidAppear[/b]
如图所示
相关文章推荐
- iOS远程推送测试
- iOS storyboard tableview 内容下移64 解决
- Android(java)学习笔记153:layout_weight使用注意事项
- android语音识别技术
- iOS开发前须注意
- 使用 git 遇见的问题
- The word is not correctly spelled
- Android数据库安全解决方案,使用SQLCipher进行加解密
- ionic 中默认安装后导航在底部解决方案 $ionicConfigProvider, ios and android
- Android的各种数据存储方式_part1
- Android: 线程的结束,挂起和恢复
- Android开发中Handler的经典总结
- iOS 循环线程的实现
- Android—IntentService
- Android之读取大图片内存溢出
- python-可变迭代对象在for循环中的风险Risk in FOR loop while looping mutable iterable object
- Android文件存储
- android中listview分页加载数据
- Unity AssetBundle爬坑手记
- Swift和OC混用