2015-09-09 65 views
0

这是什么说法,如苹果DOC声明:指定的初始化程序?

有时一个超类的指定初始化可能是足够的子类,所以没有必要为子类来实现自己的指定初始化。其他时候,一个类的指定初始值设定项可能是其超类指定初始值设定项的重写版本。当子类需要补充由超类的指定初始化器执行的工作时,即使子类没有添加任何它自己的实例变量(或者它添加的实例变量不需要显式初始化),这也经常是这种情况。

Apple's Documentation

难道说,我没有创建子类和超类指定初始化就足够了,如果是如何将子类的属性初始化一个指定初始化?并在什么情况下,如果这允许?这将如何工作?

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

回答

3

实施例:

有一个超类AinitWithName: DI。

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

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

这将创建B对象,并调用从AinitWithName:方法。

现在,如果你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; 
} 
+0

对于第一部分的说法是在我没有任何的init方法的情况是什么在我的子类中,但我确实有其他方法和属性,但如果调用DI init方法,子类中的属性和方法是否也会初始化?或者它只是父类和初始化的类? –

+0

如果您在子类中有任何必须被初始化的东西,那么您的子类必须覆盖任何需要的初始化器,以便它可以正确地初始化这些值。 – rmaddy

相关问题