访问超类的实例变量,适当的形式
问题描述:
我对objective-c和编程非常陌生。我已经读过一个关于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很好。 [super init]
应该从子类的init
方法中调用。
- (id) init {
self = [super init];
if (self) {
// Init
}
return self;
}
我看不出任何使用示例2的原因。例如1好, – 2012-03-04 10:45:20
谢谢。有什么样的例子,它可能被认为是一种超类的实例变量被访问的不良形式? – markckim 2012-03-04 10:56:46
如果从子类访问ivar不好,应该用'@ private'保护,而不能从子类访问 – 2012-03-04 11:20:43