0

我在理解指定的初始化程序时遇到了一些麻烦。我正在从“在 Mac 上学习 Objective C”一书中学习 Objective 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 类的实例时

Tire *aTire = [[Tire alloc] init];

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

4

1 回答 1

0

init在轮胎类方法调用中[self initWithPressure: 34 treadDepth: 20],压力将为 34。

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

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

于 2012-04-02T07:56:03.353 回答