IOS视图控制器的生命周期实例详解
程序员文章站
2023-12-20 12:50:28
ios视图控制器
所谓的生命周期,也就是几个函数的调用顺序,这里以用storyboard来创建一个viewcontroller为例
然后我们测试如下代码...
ios视图控制器
所谓的生命周期,也就是几个函数的调用顺序,这里以用storyboard来创建一个viewcontroller为例
然后我们测试如下代码
// // viewcontroller.m // // created by huangwenchen on 14/12/26. // copyright (c) 2014年 huangwenchen. all rights reserved. // #import "viewcontroller.h" @interface viewcontroller () @end @implementation viewcontroller - (id)initwithcoder:(nscoder *)adecoder{ if (self = [super initwithcoder:adecoder]) { nslog(@"initwithcoder called"); } return self; } - (void)viewdidload { [super viewdidload]; nslog(@"viewdidload called"); // do any additional setup after loading the view, typically from a nib. } - (void)viewwillappear:(bool)animated{ [super viewwillappear:animated]; nslog(@"viewwillappear called"); } -(void)viewdidappear:(bool)animated{ [super viewdidappear:animated]; nslog(@"viewdidappear called"); } -(void)awakefromnib{ nslog(@"awakefromnib called"); } -(void)viewwilllayoutsubviews{ nslog(@"viewwilllayoutsubviews called"); } -(void)viewdidlayoutsubviews{ nslog(@"viewdidlayoutsubviews called"); } @end
然后,在模拟器上运行,输出为
2014-12-29 19:42:47.904 kvcforcsdn[2370:126741] initwithcoder called 2014-12-29 19:42:47.907 kvcforcsdn[2370:126741] awakefromnib called 2014-12-29 19:42:47.927 kvcforcsdn[2370:126741] viewdidload called 2014-12-29 19:42:47.927 kvcforcsdn[2370:126741] viewwillappear called 2014-12-29 19:42:47.961 kvcforcsdn[2370:126741] viewwilllayoutsubviews called 2014-12-29 19:42:47.963 kvcforcsdn[2370:126741] viewdidlayoutsubviews called 2014-12-29 19:42:47.970 kvcforcsdn[2370:126741] viewdidappear called
所以,调用顺序为
1 init函数(init;initwithframe;initwithcoder;等)--初始化
2 awakefromnib--在loadview之前的工作放在这里
3 viewdidload--注意,一个viewcontroller一个生命周期内这个函数只会调用一次
4 viewwillappear -- view将要出现,每次view消失再出现都会调用
5 viewwilllayoutsubviews--简要对子试图进行布局
6 viewdidlayoutsubivews--完成对子试图布局
7 viewdidappear--视图将要出现在屏幕上
---上述代码不含部分
8 viewwilldisappear--view将要消失
9 viewdiddisappear--view已经消失
这九个就是通常的视图控制器生命周期内函数调用顺序,一定要清楚什么样的代码应该放在视图控制器生命周期的什么位置
bty:
didreceivememorywarning
这个函数通常也在生命周期的考虑范围内,当内存不足时候会调用,这时候应当进行适当的内存释放,不然ios会强制关闭当前的app
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!