就像我们学习其他平台语言一样,例如:ASP.NET 每一个页面都会经历一个从创建到销毁的一个过程。
同理:IOS程序的每一个控制器也要经历从有到无的过程。我们称为生命周期。那么IOS的控制器的生命周期需要经历那些过程呢,下面看代码
// 当控制器的view加载完毕就调用 - (void)viewDidLoad { [super viewDidLoad]; NSLog(@"One - viewDidLoad"); } // 控制器的view即将显示的时候调用 - (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:YES]; NSLog(@"One - viewWillAppear"); } // 控制器的view完全显示的时候调用 - (void)viewDidAppear:(BOOL)animated { [super viewDidAppear:animated]; NSLog(@"One - viewDidAppear"); } // 控制器的view即将消失的时候调用 - (void)viewWillDisappear:(BOOL)animated { [super viewWillDisappear:animated]; NSLog(@"One - viewWillDisappear"); } // 控制器的view完全消失的时候调用 - (void)viewDidDisappear:(BOOL)animated { [super viewDidDisappear:animated]; NSLog(@"One - viewDidDisappear"); }
知道了控制器声明周期,我们就可以在控制器的各个阶段,做一些相对应的工作。这些,需要具体到开发项目的需求上。
另外还补充两个已经过时的方法:
// 控制器的view即将销毁的时候调用 - (void)viewWillUnload { [super viewWillUnload]; } // 控制器的view完全销毁的时候调用 - (void)viewDidUnload { [super viewDidUnload]; // 清空不需要的属性 // [self.foods release]; self.foods = nil; }
解释这两个方法之前,我再介绍一个方法:内存警告
// 接收到内存警告的时候调用 - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; }
请看图解:
解释:当程序发出一个内存警告--->
系统询问控制器有View吗--->如果有View
系统询问这个View能够销毁吗---->通过判断View是否在Windown上面,如果不在,就表示可以销毁
如果可以销毁,就执行viewWillUnLoad()----->对你的View进行一次release,此时View就为nil
然后调用viewDidUnLoad()----->一般还会在这个方法里将一些不需要属性清空