我们知道,在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
}
}