欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

IOS视图控制器的生命周期实例详解

程序员文章站 2024-02-13 19:28:40
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

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!