当我为我的子类使用自定义初始化程序时,我该如何调用超类的自定义初始化程序?

时间:2017-12-30 12:42:57

标签: objective-c inheritance initialization subclassing

我正在学习Objective-C,而且我不清楚什么是调用超类的最佳方法。自定义初始化程序,同时在其子类中定义一个。

这是我的班级' (超类)自定义初始化程序:

-(id) initWithWidth:(int)w andHeight:(int)h {
    self = [super init];

    if (self) {
        [self setWidth:w andHeight:h];
    }
    return self;
}

-(instancetype) init {
    return [self initWithWidth:0 andHeight:0];
}

我称之为超类' (NSObject)初始值设定项并将其分配给self。在检查self不是nil之后,我调用了类中定义的方法。之后,假设我的自定义初始值设定项是指定的初始值设定项,我会覆盖标准init

现在,我创建该类的子类。子类还有一个自定义初始化程序。这是:

-(id) initWithSide:(int)side {
    self = [super initWithWidth:side andHeight:side];

    if (self) {
        [self setSide: side];
    }
    return self;
}

-(instancetype) init {
    return [self initWithSide:0];
}

逻辑是相同的(再次,它调用在类中定义的自定义方法)。

问题是,我不太确定调用超类的正确方法是什么?初始化器(我仍然应该调用它,对吧?)。在论坛中,我发现有些人根本不打电话,这让我很困惑。

我应该拨打超类的指定初始化程序,还是根本不打电话给它。如果你能解释一下这是如何工作的,在这种情况下是正确的选择(或者是最佳实践),我将非常感谢你的帮助。

0 个答案:

没有答案