viewController的生命周期
看图辨周期
在这幅图里,我们可以清楚的看到viewController的生命周期,以及每个方法之间的关系,以下我们就讲讲每个方法的意义及用途。
图中方法介绍(按顺序)
1. loadView
用来负责创建UIViewController的view
每次访问UIViewController的view,而且view为nil时,loadView方法就会被调用。
2. viewDidLoad
在loadView方法后被调用,可以进行自定义数据以及动态创建其他控件。
死循环
当我们重写loadView
却没有加载view
,而viewDidLoad
里写了要加载的控件时,则会在loadView
和viewDidLoad
之间死循环。
而当viewDidLoad
里没有要加载的控件时,新版Xcode会循环几遍,然后跳出到viewWillAppear
里,随后又跳了回去,循环将近6次。
而旧版Xcode会循环2遍,之后停止。
3. viewWillAppear
视图将出现在屏幕前,马上这个视图就会被展示的时候调用。
4. viewWillLayoutSubviews
控制器的view将要布局子控件。
当当前控制器的view
的frame
设为CGRectZero
时不会调用
5. viewDidLayoutSubviews
控制器的view已经布局完子控件。
6. viewDidAppar
视图已经渲染完成,在屏幕上展示时调用。
7. viewWillDisappear
视图将被从屏幕上移除之前执行。
8. viewDidDisappear
视图已经从屏幕上移除,用户看不到这个视图时执行。
9. dealloc
视图销毁,对于viewController
的内存释放。
例如:
A—(跳转)—>B
此时A不会触发dealloc
方法,但是当从B返回A时,会触发B的dealloc
方法。
10. didReceiveMemoryWarning/viewDidUnload
已经更新为viewDidUnload
,当内存告警时,会自动调用此方法,效果是将已经加载好的视图上面的控件全部销毁,只留下loadView
走完后生成的view
。