指定的初始化程序如何工作

时间:2012-04-02 07:39:20

标签: designated-initializer

我在理解指定的初始化程序时遇到了一些麻烦。 我正在从“在Mac上学习目标C”一书中学习目标C. 以下是实施文件。

#import "Tire.h"


@implementation Tire

- (id) init
{
    if (self = [self initWithPressure: 34 treadDepth: 20]) {
    }

    return (self);

} // init


- (id) initWithPressure: (float) p
{
    if (self = [self initWithPressure: p treadDepth: 20.0]) {
    }

    return (self);

} // initWithPressure


- (id) initWithTreadDepth: (float) td
{
    if (self = [self initWithPressure: 34.0 treadDepth: td]) {
    }

    return (self);
} // initWithTreadDepth


- (id) initWithPressure: (float) p treadDepth: (float) td
{
    if (self = [super init]) {
        pressure = p;
        treadDepth = td;
    }

    return (self);
} // initWithPressure:treadDepth:

据我所知:

- (id) initWithPressure: (float) p treadDepth: (float) td

是默认的初始值设定项。当轮胎类的实例应该用

之类的语句初始化时
Tire *aTire = [[Tire alloc] init];

然后将执行上述初始化方法。 然而,由于该方法包含“压力= p”,所以压力等于从此到此阶段我们没有给出“p”任何值。 此外,此方法完成执行后会发生什么?哪个是队列中的下一个“init”方法?

1 个答案:

答案 0 :(得分:0)

轮胎类方法中的

init调用[self initWithPressure: 34 treadDepth: 20]所以压力将是34。

链中的下一个方法将是来自超类的init方法,因为initWithPressure: (float) treadDepth: (float)方法明确地调用它:[super init]

initWithPressure: (float) treadDepth: (float)完成后,从initWithPressure...被调用的位置继续执行。