2012-03-04 130 views
0

我對objective-c和編程非常陌生。我已經讀過一個關於objective-c的stackoverflow上發佈的問題之一,它是「不良形式」,直接到訪問超類的實例變量。下面是什麼,我認爲這意味着直接從超類(例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

我看不出任何使用示例2的原因。例如1好, – 2012-03-04 10:45:20

+0

謝謝。有什麼樣的例子,它可能被認爲是一種超類的實例變量被訪問的不良形式? – markckim 2012-03-04 10:56:46

+0

如果從子類訪問ivar不好,應該用'@ private'保護,而不能從子類訪問 – 2012-03-04 11:20:43

回答

0

例1很好。
[super init]應該從子類的init方法中調用。

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