我对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];
如果这个问题无关紧要或我没有意义,请道歉。另外,如果我误解了在访问超类的实例变量时表现不好可能意味着什么,请道歉。此外,如果已经提出这个问题(我找不到任何类似的问题),请道歉 - 如果有,那么链接到该问题会有所帮助。感谢。
答案 0 :(得分:0)
示例1很好。
应该从子类的[super init]
方法调用init
。
- (id) init {
self = [super init];
if (self) {
// Init
}
return self;
}