ViewController 生命周期的第一步是初始化。不过具体调用的方法还有所不同。如果使用 StoryBoard 来创建 ViewController,我们不需要显式地去初始化,Storyboard 会自动使用 initWithCoder: 进行初始化。如果不使用 StoryBoard,我们可以使用 init: 函数进行初始化,init: 函数在实现过程中还会调用 。 我们应该尽量避免在 VC 外部调用 initWithNibName,而是把它放在 VC 的内部(参考)。

    • (void)loadView
    • (void)viewDidLoad
    • (void)viewWillAppear
    • (void)viewDidLayoutSubviews
    • (void)viewDidAppear
    • (void)viewWillDisappear
    • (void)viewDidDisappear

    假设现在有一个 AViewController(简称 Avc) 和 BViewController (简称 Bvc),通过 navigationController 的 push 实现 Avc 到 Bvc 的跳转,下面是各个方法的执行执行顺序:

    1. 2. A viewWillAppear
    2. 4. A viewDidAppear

    可见 viewDidLoad 只会调用一次,再第二次跳回 Avc 的时候,AViewController 仍然存在于内存中,也就不需要 load 了。

    从 iOS 6 开始,viewDidUnload 方法被废弃掉了,应用受到 memory warning 时也不会再调用 viewDidUnload 方法。我们可以通过重载 - (void)didReceiveMemoryWarning 和 来进行清理工作。

    1. UIViewController生命周期方法执行顺序