共计 1149 个字符,预计需要花费 3 分钟才能阅读完成。
## ARC 环境
单个 viewController 的生命周期
initWithCoder:(NSCoder *)aDecoder:(如果使用 storyboard 或者 xib)
loadView:加载 view
viewDidLoad:view 加载完毕
viewWillAppear:控制器的 view 将要显示
viewWillLayoutSubviews:控制器的 view 将要布局子控件
viewDidLayoutSubviews:控制器的 view 布局子控件完成
这期间系统可能会多次调用 viewWillLayoutSubviews、viewDidLayoutSubviews 俩个方法
viewDidAppear: 控制器的 view 完全显示
viewWillDisappear:控制器的 view 即将消失的时候
这期间系统也会调用 viewWillLayoutSubviews、viewDidLayoutSubviews 两个方法
viewDidDisappear:控制器的 view 完全消失的时候
多个 viewControllers 跳转
当我们点击 push 的时候首先会加载下一个界面然后才会调用界面的消失方法
initWithCoder:(NSCoder *)aDecoder:ViewController2 (如果用 xib 创建的情况下)
loadView:ViewController2
viewDidLoad:ViewController2
viewWillDisappear:ViewController1 将要消失
viewWillAppear:ViewController2 将要出现
viewWillLayoutSubviews ViewController2
viewDidLayoutSubviews ViewController2
viewWillLayoutSubviews:ViewController1
viewDidLayoutSubviews:ViewController1
viewDidDisappear:ViewController1 完全消失
viewDidAppear:ViewController2 完全出现
小结
整个控制器声明周期:
viewDidLoad
viewWillAppear
viewWillLayoutSubviews
viewDidLayoutSubviews
viewDidAppear
viewWillDisappear
viewDidDisappear
二、非 ARC 环境下
didReceiveMemoryWarning:
当 app 收到内存警告的时候会发消息给视图控制器。app 从来不会直接调用这个方法,而是当系统确定可用内存不足的时候采取调用。
如果你想覆写这个方法来释放一些控制器使用的额外内存,你应该在你的实现方法中调用父类的实现方法。