UIView生命周期
当View 以及 View的SubView添加到VC上的时候 流程如下:
首先进行的是VC的initNib->loadView->ViewdidLoad
然后才是View操作:view的init ->subview的willMoveToSuperView ->subView的didMoveToSuperView ->view的didAddSubView ->view的willMoveToSuperView ->view的didMoveToSuperView
当view以及subView的moveToSuperView操作进行完毕会调用VC的viewWillAppear
然后这个时候才将进行window的操作:首先是将view的willMoveToWindow->subView的willMoveToWindow->subView的didMoveToWindow ->view的didMoveToWindow
当所有的view以及subView都已经在window上展示后
会调用VC的:viewWillLayoutSubViews
调用view的layoutSubViews
在调用subView的layoutSubViews
最后调用VC的viewDidAppear
自此所有视图展示出来
总结一下:加载阶段loadView阶段,先把subViews加到各自的superView上,然后再一次寻找自己的superView并依次添加。到此为止,只有addSubView有关系,当所有的subview在内存层级上全部加完了,会调用一次viewWillAppear然后把加载好的view一层层的分别绘制到window上 。然后layoutSubView,DrawRect完成。
当移除VC的时候
先调用VC的viewWillDisapper
然后调用View的willMoveToWindow ->subView的willMoveToWindow->subView的didMoveToWindow->view的didMoveToWindow
然后调用VC的viewDidDisappear->dealloc销毁VC之后
调用view的willMoveToSuperView ->view的didMoveToSuperView->view的willRemoveSubView
此时view的所有操作都完成了
再移除subView ,subView的willMoveToSuperView ->subView的didMoveToSuperView
总结一下:
移除阶段,会先依次移除本view的moveToWindow,然后依次移除所有子视图,调用他们的moveToWindow,view就在window上移除消失了。然后再removeFromSuperView,然后dealloc后,再removeSubView。