iOS学习笔记(一):UIViewController的生命周期

我们知道,在Swift等面向对象的高级编程语言中,当需要一个对象时,它会被创建并分配到内存中,当它不再被需要时,也应该被系统释放回收。在一个ViewController对象被创建和释放的过程中,会调用许多生命周期函数,下面就来简单地列举一下。

import UIKit

var k=0//根据k值的变化来反映下述函数的执行顺序

class ViewController: UIViewController {
    
    //以下函数为UIViewController被创建到展现的过程
    //从xib文件进行初始化
    override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?) {
        super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)
        k+=1//此时k=1
    }
    
    //从归档进行初始化
    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        k+=1//此时k=2
    }
    
    //从xib加载
    override func awakeFromNib() {
        super.awakeFromNib()
        k+=1//此时k=3
    }

    //加载视图
    override func loadView() {
        super.loadView()
        k+=1//此时k=4
    }
    
    //加载视图完毕。由于这个函数调用时,控制器的初始化基本完成,一般在这里,我们会将一些Controller额外的功能加在这个函数中
    override func viewDidLoad() {
        super.viewDidLoad()
        k+=1//此时k=5
    }
    
    //将要布局子视图
    override func viewWillLayoutSubviews() {
        super.viewWillLayoutSubviews()
        k+=1//此时k=6
    }
    
    //布局子视图完成
    override func viewDidLayoutSubviews() {
        super.viewDidLayoutSubviews()
        k+=1//此时k=7
    }
    
    //收到内存警告
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        k+=1//若没有收到内存警告,则k不增加
    }
    
    //视图将要展示时
    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        k+=1
    }
    
    //视图已经展示
    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
        k+=1
    }
    
    //以下函数为UIViewController被释放和销毁时的过程
    //视图将要消失时,通常在此处做一些数据清理操作
    override func viewWillDisappear(_ animated: Bool) {
        super.viewWillDisappear(animated)
        k+=1
    }
    
    //视图已经消失
    override func viewDidDisappear(_ animated: Bool) {
        super.viewDidDisappear(animated)
        k+=1
    }
    
    //析构方法(对象销毁方法)
    deinit {
        k+=1
    }
}

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注