57-控制器的生命周期

来源:互联网 发布:水电安装价格知乎 编辑:程序博客网 时间:2024/04/28 04:36
控制器的生命周期

1.通过控制器的生命周期可以了解到:
1>控制器的View什么时候创建,什么时候销毁。
2>
控制器的view是懒加载的,例如导航控制器有2个子控制器,先会加载第一个子控制器的view,当Push第二个的时候,才去加载第二个控制器的view。

2.内存警告的传递过程:
手机内存不足产生事件->通知应用程序->调用应 用程序代理方法->把事件传递给窗口->窗口传给控制器->调用控制器 内存警告的方法。 

3.在控制器的生命周期需要注意有些事情不能说的太绝对(区别于MRC和ARC):
在控制器的view完全消失的时候,可能会因内存不足发生内存警告,此时可能会调用内存警告方法,
在MRC中会调用View即将卸载的方法(viewWillUnload),然后View有可能会被Release(销毁),
销毁后可能调用View已经销毁的方法(viewDidUnload),ARC自动管理内存,在发生内存警告时候
系统自动处理,不会执行管理内存这三步操作.

4.控制器的View已经卸载(销毁)的时候调用(viewDidUnload方法注意:)
1>作用:viewDidUnload里面一般清空显示在view里面的数据
2>原因:View都不再了,View上面的数据自然要清空
3>怎么把显示在view上面的数据给清空:使用nil,self.array=nil(array是View上面的数组)
建议使用nil的原因:使用nil清空数据,在MRC和ARC都通用,而ARC是不能使用Release. 只有MRC可使用。
5.经验:控制器的生命周期方法(一般以View开头的方法)



//==== ARC的内存管理(1,2,3,4,5,6(可能会调用)) ==== 

//1.控制器的view加载完成的时候调用
- (
void)viewDidLoad {
    [
super viewDidLoad];
    
    
NSLog(@"%s",__func__);
}

//2.控制器的view即将显示的时候调用
-(
void)viewWillAppear:(BOOL)animated
{
    [
super viewWillAppear:animated];
    
NSLog(@"%s",__func__);
}

//3.控制器的view完全显示的时候调用
-(
void)viewDidAppear:(BOOL)animated
{
    [
super viewDidAppear:animated];
    
NSLog(@"%s",__func__);
}

//4.控制器的view即将消失的时候调用
-(
void)viewWillDisappear:(BOOL)animated
{
    [
super viewDidDisappear:animated];
    
NSLog(@"%s",__func__);
}

//5.控制器的view完全消失的时候调用
-(
void)viewDidDisappear:(BOOL)animated
{
    [
super viewDidDisappear:animated];
    NSLog(
@"%s",__func__);
}

//6.控制器的View发生内存警告的时候调用
- (
void)didReceiveMemoryWarning {
    [
super didReceiveMemoryWarning];
}

/*
在控制器的生命周期需要注意有些事情不能说的太绝对(区别于MRC和ARC):

 在控制器的view完全消失的时候,可能会因内存不足发生内存警告,此时可能会调用内存警告方法,
在MRC中会调用View即将卸载的方法(viewWillUnload),然后View有可能会被Release(销毁),
销毁后可能调用View已经销毁的方法(viewDidUnload),ARC自动管理内存,在发生内存警告时候
系统自动处理,不会执行管理内存这三步操作.
 
*/


//==== MRC的内存管理(1,2,3,4,5,678(可能会调用)) ==== 

//7.控制器的View即将卸载(销毁)的时候调用
-(
void)viewWillUnload
{
    
}

//8.控制器的View已经卸载(销毁)的时候调用
-(
void)viewDidUnload
{
      //1>作用:viewDidUnload里面一般清空显示在view里面的数据
      
//2>原因:View都不再了,View上面的数据自然要清空
      
//3>怎么把显示在view上面的数据给清空:使用nil:self.array=nil(array是View上面的数组)
      //建议使用nil的原因:,nil清空数据,在MRC和ARC都通用,而ARC是不能使用Release. 只有MRC可以。
}
0 0