awakeFromNib
- awakeFromNib 从xib或者storyboard加载完毕就会调用
- initWithCoder: 只要对象是从文件解析来的,就会调用
- awakeFromNib和initWithCoder同时存在会先调用initWithCoder:
- initWithFrame:使用代码加载的对象调用(使用纯代码创建)
nib 加载结构时 发送一个awakeFromNib消息告诉每个对象重建一个nib 归档,但只有在所有的档案中的对象已加载和初始化。当一个对象接收awakefromnibmessage,这是保证其所有出口和行动连接已经建立。
-(void)awakeFromNib;从字面上理解,就是从nib文件中唤醒对象,完成对每一个对象的实例化或与nib文件的关联。
需要注意的问题:
当使用一个controller控制多个nib文件时,awakeFromNib方法会被多次调用。因此,当不使用awakeFromNib方法来完成nib对象的初始化时,需要注意此方法的多次调用对其他nib文件造成的影响
layoutSubview
layoutSubview :为该View添加子控件,设置frame值
layoutSubview的调用场景:
使用addSubview添加时会调用layoutSubView
设置视图的父视图的Size时会调用
改变视图的frame的时候会被调用
滚动scrollview的时候会被调用
设备的orientation(方向)改变时,涉及改变的UIViewControl 的root view
(此时所有的控件被重新布局,相当于A的frame被改变 那么会调用layoutSubview 而且如果控件有B的话会再调用一次layoutSubview)
调用setNeedsLayout时会被调用
layoutSubview不是在调用完比如addSubview等方法之后就马上调用,而是会在调用addSubview方法所在的作用域结束之后之后才调用,因此即使你在同一个方法中既使用了addSubViews又更改了frame,也是只会调用一次layoutSubview而已