在Objective-C中,指定的初始值设定项总是被调用的规则并不总是被遵守?

在Objective-C中,指定的初始值设定项总是被调用的规则并不总是被遵守?,objective-c,ios,designated-initializer,Objective C,Ios,Designated Initializer,在Objective-C中,规则是类的指定初始值设定项总是被确定地调用,我们能依赖这一事实吗?或者我们可以说,除了几个例外,它几乎总是正确的?例如,对于UIView,显示: initWithFrame: 如果以编程方式创建视图对象,则此方法是 为UIView类指定的初始值设定项。子类可以重写 此方法无法执行任何自定义初始化,但必须调用super 在实施之初 如果您使用界面生成器 要设计界面,在查看时不调用此方法 随后从nib文件加载对象。笔尖中的对象 重新配置文件,然后使用其initWithCo

在Objective-C中,规则是类的指定初始值设定项总是被确定地调用,我们能依赖这一事实吗?或者我们可以说,除了几个例外,它几乎总是正确的?例如,对于
UIView
,显示:

initWithFrame:

如果以编程方式创建视图对象,则此方法是 为UIView类指定的初始值设定项。子类可以重写 此方法无法执行任何自定义初始化,但必须调用super 在实施之初

如果您使用界面生成器 要设计界面,在查看时不调用此方法 随后从nib文件加载对象。笔尖中的对象 重新配置文件,然后使用其initWithCoder进行初始化: 方法

或者我们可以说,如果是以编程方式,则该规则应始终适用于设计良好的类,但Interface Builder有点不同,因为它有点“复活”或以非编程方式构建对象。如果是这样的话,在我们进行iOS编程时,它们通常是其他例外吗?

事实上,使用Interface Builder设计的类是未归档的,并且没有初始化

归档涉及到类未初始化但未归档,因此
initWithCoder:
方法负责在使用Interface Builder配置的归档属性加载控件时设置控件


您应该将初始化操作放在
awakeFromNib:
方法中,该方法在加载对象后在每种情况下都会被调用,因此您将确保将调用初始化语句。

awakeFromNib:
在以编程方式创建对象时不会被调用。我建议在
layoutSubviews
中进行初始设置(对于
UIView
子类)