当一个视图控制器被创建,并在屏幕上显示的时候,代码的执行顺序如下:
-
initialize
当前类第一次被使用的时候调用,该方法在整个程序运行的过程中只会执行一次,并且不需要[supuer initialize]。 -
alloc
创建对象,分配空间。 -
init
初始化对象,初始化数据。 -
loadView
不需要用户主动调用,这方法是当view为nil的时候被调用。也就是说如果当当前的。ViewController接收到系统发送的didReceiveMemoryWarning
事件的时候可能会把当前的。ViewCongtroller中的视图置为nil,那么当这个ViewController再次显示出来的时候就会再次调用loadView方法。 -
viewDidLoad
视图载入完成,可以进行自定义数据以及动态创建其他控件。 -
viewWillAppear
视图即将出现在屏幕之前。 -
viewWillLayoutSubviews
布局子视图,比如一些控件的约束可以在这里设置。 -
viewDidLayoutSubviews
已经布局完成子视图。经过测试,从nib文件加载的controller,只要不释放,在每次viewWillAppare时都会调用layoutSubviews方法,有时甚至会在viewDidAppare后在调用一次layoutSubviews,而重点是从代码加载的则只会在开始调用一次,之后都不会,所以注意,在layoutSubviews中写相关的布局代码十分危险 -
viewDidAppear
视图在屏幕上渲染完成。 -
viewVillDisappear
视图即将消失在屏幕之前。 -
viewDidDisappear
视图消失在屏幕之后 -
didReceiveMemoryWarning
当系统接收到系统警告的时候会发送给除正在显示的ViewController的其余ViewController该方法,以便用户释放无用内存。系统会将一些视图置nil,就会导致当再次显示该ViewController的时候,重新调用loadView和viewDidLoad方法,重新布局视图。 -
dealoc
控制钱被销毁释放。
网友评论