IOS UIViewController控制器生命周期

2019-04-29  本文已影响0人  你duck不必呀

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:]
上一篇下一篇

猜你喜欢

热点阅读