iOS视图控制对象生命周期-init、viewDidLoad、viewWillAppear、v...

iOS视图控制对象生命周期-init、viewDidLoad、viewWillAppear、viewDidAppear、viewWillDisappear、viewDidDisappear的区别及用途 app

init-初始化程序 spa

viewDidLoad-加载视图 对象

viewWillAppear-UIViewController对象的视图即将加入窗口时调用; 生命周期

viewDidApper-UIViewController对象的视图已经加入到窗口时调用; 内存

viewWillDisappear-UIViewController对象的视图即将消失、被覆盖或是隐藏时调用; it

viewDidDisappear-UIViewController对象的视图已经消失、被覆盖或是隐藏时调用; io

viewVillUnload-当内存太低时,须要释放一些不须要使用的视图时,即将释放时调用; 变量

viewDidUnload-当内存太低,释放一些不须要的视图时调用。 硬件

  

        视图控制对象经过alloc和init来建立,可是视图控制对象不会在建立的那一刻就立刻建立相应的视图,而是等到须要使用的时候才经过调用loadView来建立,这样的作法能提升内存的使用率。好比,当某个标签有不少UIViewController对象,那么对于任何一个UIViewController对象的视图,只有相应的标签被选中时才会被建立出来。 程序

好比以下代码:

  1. - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil  
  2. {  
  3.     self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];  
  4.     if (self) {  
  5.         // Custom initialization  
  6.         UITabBarItem *tbi = [self tabBarItem];  
  7.         [tbi setTitle:@"CurrentTime"];  
  8.         [[self view ] setBackgroundColor:[UIColor yellowColor]];  
  9.         }  
  10.     return self;  
  11. }  

咱们将UIViewController的init方法中访问的实例变量view在init中将背景设置为黄色,运行程序,咱们能发现背景的确变成了黄色,可是,在咱们尚未须要使用视图的时候,该视图已经加载好了,在UIViewController的初始方法中访问实例变量view,会致使延迟载入机制失效,这个问题看上去不是很严重,可是若是考虑到内存太低警告,那么问题就大了。。。

  

运行程序,选择模拟器中的硬件->模拟内存太低警告,咱们会发现,本来设置的黄色背景不见了,这是由于,内存太低,视图控制对象会在发出内存太低警告时收到didReceiveMemoryWarning消息,该方法默认实现,检查视图控制对象的视图是否可见,若是不可见,则释放掉,下次在加载该视图时就不会执行init方法,而是只执行viewDidLoad方法,因此须要将[[selfview ] setBackgroundColor:[UIColoryellowColor]];放到viewDidLoad中,这样若是视图由于内存太低被释放掉了,下次须要使用到该视图的时候,程序会默认取执行该视图的viewDidLoad方法,这样背景颜色就又出来了。

 

init、viewDidLoad、viewWillAppear、viewDidAppear、viewWillDisappear、viewDidDisappear的执行顺序:

 从程序的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。

这样,一套的流程就完成了,不知道写的是否详细。。。。

相关文章
相关标签/搜索