IOS 控制器的生命周期
+ (void)load
项目启动就会调用,系统自动加载的,并且自始至终只会调用一次
调用顺序:父类的->子类的->分类
不需要调用[super load]
+ (void)load{
//[super load];不需要
NSLog(@"%s",__FUNCTION__);
}
+ (void)initialize;
这个类在第一次被初始化前调用,如果这个类没被用到,就不会调用。被多次使用也会被调用多次。
调用顺序:父类->子类(分类重写会覆盖主类)
不需要调用[super initialize];
+ (void)initialize{
NSLog(@"%s",__FUNCTION__);
}
-(void)loadView
第一次加载控制器的view(self.view==nil)会调用,具体是这样
1.它会先去找和控制器相关联的xib文件,加载xib文件来创建控制器的view
2.如果没有xib文件,如果调用了[super loadView ]
就会创建一个空白的UIView,然后赋值给控制器的view
3.如果没用xib,重写loadView里面不调用[super loadView ],这个方法会持续调用,直到栈溢出。
所以使用的时候,分情况;
如果有xib,loadView里面不用调用[super loadView ]
如果没有xib,用默认实现(不重写loadView)
如果没有xib,重写了loadView 要调用[super loadView ]
-(void)loadView{
NSLog(@"%s",__FUNCTION__);
}
- (void)viewDidLoad
加载完视图时调用,有自定义视图控件可以写在这里
- (void)viewDidLoad {
[super viewDidLoad];
NSLog(@"%s",__FUNCTION__);
}
- (void)viewWillAppear:(BOOL)animated
//视图将要显示时调用
- (void)viewWillAppear:(BOOL)animated{
[superviewWillAppear:animated];
NSLog(@"%s",__FUNCTION__);
}
-(void)viewDidAppear:(BOOL)animated
视图已经出现时调用
-(void)viewDidAppear:(BOOL)animated{
[superviewDidAppear:animated];
NSLog(@"%s",__FUNCTION__);
}
-(void)viewWillDisappear:(BOOL)animated
将要切换,消失之前调用
-(void)viewWillDisappear:(BOOL)animated{
[super viewWillDisappear:animated];
NSLog(@"%s",__FUNCTION__);
}
- (void)viewDidDisappear:(BOOL)animated
已经切换,消失了调用
- (void)viewDidDisappear:(BOOL)animated{
[superviewDidDisappear:animated];
NSLog(@"%s",__FUNCTION__);
}
- (void)viewWillLayoutSubviews
将要布局子控件时候调用
- (void)viewWillLayoutSubviews{
[super viewWillLayoutSubviews];
NSLog(@"%s",__FUNCTION__);
}
- (void)viewDidLayoutSubviews
布局完成时调用
- (void)viewDidLayoutSubviews{
[super viewDidLayoutSubviews];
NSLog(@"%s",__FUNCTION__);
}
调用结果如下:
2019-01-07 11:11:46.008646+0800 IOS-控制器生命周期[1533:41536] +[ViewController load]
2019-01-07 11:11:46.214454+0800 IOS-控制器生命周期[1533:41536] +[ViewController initialize]
2019-01-07 11:11:46.218574+0800 IOS-控制器生命周期[1533:41536] -[ViewController loadView]
2019-01-07 11:11:46.219022+0800 IOS-控制器生命周期[1533:41536] -[ViewController viewDidLoad]
2019-01-07 11:11:46.219256+0800 IOS-控制器生命周期[1533:41536] -[ViewController viewWillAppear:]
2019-01-07 11:11:46.221869+0800 IOS-控制器生命周期[1533:41536] -[ViewController viewWillLayoutSubviews]
2019-01-07 11:11:46.222021+0800 IOS-控制器生命周期[1533:41536] -[ViewController viewDidLayoutSubviews]
2019-01-07 11:11:46.223532+0800 IOS-控制器生命周期[1533:41536] -[ViewController viewDidAppear:]
网友评论