访问超类的实例变量,正确的形式

时间:2012-03-04 10:37:20

标签: objective-c

我对Objective-c和编程很新。我已经在stackoverflow上发布的关于objective-c的一个问题中读到,直接访问超类的实例变量是“坏形式”。下面是我认为直接从超类访问实例变量的示例(示例1),以及我认为使用正确的表单可能意味着什么(示例2):

// ExampleSuperClassMonster.h
@interface ExampleSuperClassMonster : CCSprite {
    int hp; // hitpoints
}
@property (readwrite) int hp;
@end

// ExampleSubClassMonster.h
@interface ExampleSubClassMonster : ExampleSuperClassMonster {
@end

// Example 1: is this bad form??
ExampleSubClassMonster *subClassMonster = [[ExampleSubClassMonster alloc] init];
subClassMonster.hp = 100;

// Example 2: is this correct form??
ExampleSubClassMonster *dummyMonster = [[super alloc] init];
dummyMonster.hp = 100;
ExampleSubClassMonster *subClassMonster = [[ExampleSubClassMonster alloc] init];
subClassMonster.hp = dummyMonster.hp;
[dummyMonster release];

如果这个问题无关紧要或我没有意义,请道歉。另外,如果我误解了在访问超类的实例变量时表现不好可能意味着什么,请道歉。此外,如果已经提出这个问题(我找不到任何类似的问题),请道歉 - 如果有,那么链接到该问题会有所帮助。感谢。

1 个答案:

答案 0 :(得分:0)

示例1很好。
应该从子类的[super init]方法调用init

- (id) init {
    self = [super init];
    if (self) {
        // Init
    }
    return self;
}