关于UIViewController的声明周期
源于一次在使用时发现有个property初始化赋值后其输出还是nil
UIViewController的生命周期简单来说主要调用了以下几个方法(通过代码创建)
1.alloc :分配空间 (类方法)
2.init :创建实例
3.loadView
4.viewDidLoad
5.viewWillAppear
6.viewDidAppear
7.viewWillDisappear
8.viewDidDisappear
有个需要注意的是init和viewDidLoad,就是这样的一个push到新controller的过程
UIbuttonClick_2.gif
我在各方法添加了个NSLog,对于单个控制器这样的一个操作就是下面这样的一个流程
屏幕快照 2016-02-01 20.09.20.png打上断点可以发现虽然是先跑的init,但是因为有 self = [super init] 这一行代码,会导致我们先走父类的方法(父类又会去根据子类的重写去跑子类的方法)因此就导致 NSLog(@"First_init");这一行代码的执行是会在viewDidLoad后才执行的。
- (instancetype)init
{
self = [super init];
if (self) {
self.title = @"第一个控制器";
NSLog(@"First_init");
}
return self;
}
所以对于viewController内的属性初始化要放在适当的位置,避免出现未初始化就使用的情况
如果没走 下面这一行的话,就是按照这样的顺序的
self = [super init]
网友评论