0

苹果文档中所说的这句话是什么意思:

有时,超类的指定初始化器对于子类可能就足够了,因此子类不需要实现自己的指定初始化器。其他时候,类的指定初始化程序可能是其超类的指定初始化程序的重写版本。当子类需要补充由超类的指定初始化程序执行的工作时,通常会出现这种情况,即使子类没有添加它自己的任何实例变量(或者它添加的实例变量不需要显式初始化)。

苹果的文档

是不是说我不必为子类创建指定的初始化程序,而超类指定的初始化程序就足够了,如果是这样,子类的属性将如何初始化?如果允许,在什么情况下?那将如何运作?

此外,如果您覆盖 DI,您如何从子类调用该方法,因为父类具有与您相同的 DI?需要补充工作是什么意思?

4

1 回答 1

3

例子:

有一个A带有initWithName:DI 的超类。

现在您创建子类B。如果您想要相同的 DI 并且不需要任何额外的初始化,则与该init方法无关。您只需调用:

B *someBObject = [[B alloc] initWithName:@"A Name"];

这将创建B对象并从 调用initWithName:方法A

现在,如果您的B班级需要在initWithName:方法中做补充工作,那么您将其添加到B.m

- (instancetype)initWithName:(NSString *)name {
    self = [super initWithName:name];
    if (self) {
        // do some additional stuff to initialize this "B" instance
    }

    return self;
}
于 2015-09-10T00:00:10.350 回答