初始化一个view的时候 一般会选择以下两种方式一起写 代码如下:
- (instancetype)initWithFrame:(CGRect)frame { if (self = [super initWithFrame:frame]) { [self initConstraint]; } return self;}- (instancetype)initWithCoder:(NSCoder *)coder { if (self = [super initWithCoder:coder]) { [self initConstraint]; } return self;}why?
那么这两个方法到底有什么区别?外加一个awakeFromNib 这三个系统方法有什么区别??
answer
1、initWithFrame只适用纯代码创建时调用,不涉及xib或storyboard
2、initWithCoder、awakeFromNib是从xib、storyboard中创建时会调用。
3、所以一般来说,为了安全起见,初始化控件的代码我们写在一个方法里面(类似我上面的initViews方法),然后我们分别在initWithFrame和initWithCoder中都调用一下
4、initwithCoder调用时期比awakeFromNib要早一些 ,具体可以理解为initWithCoder创建出来的控件是死的 ,awakeFromNib负责唤醒