初始化view的为什么会失效& initWithFrame 、initWithCoder、awakeFromNib有何区别?

1,222 阅读1分钟

初始化一个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负责唤醒