iOS 控制器生命周期打印及其作用

在 iOS 开发中,控制器生命周期是开发过程中非常重要的一部分。控制器生命周期包括了控制器从创建到销毁的整个过程,开发者可以在不同的生命周期方法中执行相应的操作,以实现对控制器的管理和控制。本文将介绍 iOS 中控制器生命周期的各个阶段,并通过代码示例演示如何打印控制器的生命周期,以帮助开发者更好地理解和使用控制器生命周期。

控制器生命周期方法

在 iOS 中,每个控制器都有其特定的生命周期方法,这些方法按照一定的顺序被调用,具体的生命周期方法包括:

  1. init(nibName:bundle:):初始化方法,用于控制器的实例化。
  2. loadView:加载视图,用于创建和加载控制器的视图。
  3. viewDidLoad:视图加载完成,用于执行一些初始化操作。
  4. viewWillAppear:视图即将显示,用于执行一些将要显示的操作。
  5. viewDidAppear:视图已经显示,用于执行一些已经显示后的操作。
  6. viewWillDisappear:视图即将消失,用于执行一些将要消失的操作。
  7. viewDidDisappear:视图已经消失,用于执行一些已经消失后的操作。
  8. dealloc:销毁方法,用于控制器的销毁。

这些生命周期方法的调用顺序如下图所示:

pie
    title 控制器生命周期方法调用比例
    "init(nibName:bundle:)", 5
    "loadView", 10
    "viewDidLoad", 15
    "viewWillAppear", 20
    "viewDidAppear", 25
    "viewWillDisappear", 15
    "viewDidDisappear", 10
    "dealloc", 5

控制器生命周期打印

为了更好地理解控制器的生命周期,我们可以在每个生命周期方法中添加打印语句,以观察每个方法的调用情况。下面是一个简单的示例,展示了如何在控制器的生命周期方法中添加打印语句:

class ViewController: UIViewController {

    override init(nibName: String?, bundle: Bundle?) {
        super.init(nibName: nibName, bundle: bundle)
        print("init")
    }

    required init?(coder: NSCoder) {
        super.init(coder: coder)
        print("init with coder")
    }

    override func loadView() {
        super.loadView()
        print("loadView")
    }

    override func viewDidLoad() {
        super.viewDidLoad()
        print("viewDidLoad")
    }

    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        print("viewWillAppear")
    }

    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
        print("viewDidAppear")
    }

    override func viewWillDisappear(_ animated: Bool) {
        super.viewWillDisappear(animated)
        print("viewWillDisappear")
    }

    override func viewDidDisappear(_ animated: Bool) {
        super.viewDidDisappear(animated)
        print("viewDidDisappear")
    }

    deinit {
        print("dealloc")
    }
}

在上面的代码中,我们在每个生命周期方法中添加了打印语句,当控制器的生命周期方法被调用时,控制台会输出相应的信息,以帮助我们了解控制器的生命周期。

控制器生命周期示例

现在我们可以创建一个简单的示例,演示控制器的生命周期方法的调用顺序:

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        print("viewDidLoad")
    }

    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        print("viewWillAppear")
    }

    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
        print("viewDidAppear")
    }

    override func viewWillDisappear(_ animated: Bool) {
        super.viewWillDisappear(animated)
        print("viewWillDisappear")
    }

    override func viewDidDisappear(_ animated: Bool) {
        super.viewDidDisappear(animated)
        print("viewDidDisappear")
    }

    deinit {
        print("dealloc")
    }
}

let viewController = ViewController()
viewController.viewWillAppear(true)
viewController.viewDidAppear(true)
viewController.viewWillDisappear(true)
viewController.viewDidDisappear(true