说到view的生命周期通常都是指视图控制器的view生命周期。程序员
视图控制器(UIViewController)及其子类,不管是手写代码仍是storyboard、xib确定会调用loadView方法。其它的视图不会调用好比UIButton,UILabel等,由于他们不是视图控制器。下面是视图控制器被建立时会被调用的其它方法:app
Storyboard/XIB会调用的方法:函数
initWithCoder布局
awakeFromNib:此时frame尚未完成。测试
手写代码调用的代码(必须是UIView好比自定义MDDButton : UIButton)orm
initWithFrame,建立时init会被调用此方法(能够继承UIView,作下测试),不过frame为0.除非显示调用此方法,frame才会有值,好比:[[MDDButton alloc] initWithFrame:CGRectMake(10, 10, 100, 40)];这样显示的调用frame不为0。blog
view采用懒加载的方式,只有用到view时才会被建立,即才会被调用 loadView ——>viewDidLoad这一系列函数继承
加载到内存完成后会调用此函数,在视图切换中,只要控制器不从内存中移除此方法就不会被调用。通常在此方法中添加一些子控件,设置视图的初始属性等等,相似初始化。生命周期
即将加载到窗口时调用此方法。通常在此方法作一些较为耗时的。这样就能够先显示基本的视图,呈现给用户(让用户感受不是那么卡),而后再显示比较耗时的。以避免显示一个白屏给用户。内存
视图已经加载到窗口时调用。
如下:
viewWillDisappear-视图即将消失、被覆盖或是隐藏时调用;
viewDidDisappear-视图已经消失、被覆盖或是隐藏时调用;
viewVillUnload-当内存太低时,须要释放一些不须要使用的视图时,即将释放时调用;
viewDidUnload-当内存太低,释放一些不须要的视图时调用。
咱们能看到手机上的视图都是UIView还有它的子UIView,固然不能杂乱无章的显示。要进行布局,父UIView须要布局、排列这些子UIView。UIView提供了layoutSubviews方法来处理。
须要注意的是layoutSubviews方法由系统来调用,不能程序员来手动调用。能够调用setNeedsLayout方法进行标记,以保证在UI下个刷屏循环中系统会调用layoutSubviews。或者调用layoutIfNeeded直接请求系统调用layoutSubviews。
layoutSubviews的被调用的时机:
最后总结一句话就是,有必要时才会调用,好比设置Frame值没有变化,是不会被调用的,很明显没有必要