UIViewController的学习

关于UIViewController的声明周期

源于一次在使用时发现有个property初始化赋值后其输出还是nil

UIViewController的生命周期简单来说主要调用了以下几个方法(通过代码创建)
1.alloc :分配空间 (类方法)
2.init :创建实例
3.loadView
4.viewDidLoad
5.viewWillAppear
6.viewDidAppear
7.viewWillDisappear
8.viewDidDisappear

有个需要注意的是init和viewDidLoad,就是这样的一个push到新controller的过程


UIViewController的学习_第1张图片
UIbuttonClick_2.gif

我在各方法添加了个NSLog,对于单个控制器这样的一个操作就是下面这样的一个流程

UIViewController的学习_第2张图片
屏幕快照 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]

UIViewController的学习_第3张图片
屏幕快照 2016-02-01 19.51.50.png

你可能感兴趣的:(UIViewController的学习)