2012-03-04 13 views
0

私はobjective-cとプログラミングにはとても新しいです。私は質問に1つの質問を読んでいましたが、それは "悪い形"だったので、に直接はスーパークラスのインスタンス変数にアクセスしました。以下は、私はそれが直接のスーパークラス(例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は良いです –

+0

ありがとうございます。スーパークラスのインスタンス変数にアクセスする方法が悪いとみなされる例がありますか? – markckim

+0

サブクラスからivarにアクセスするのが悪い場合は、 '@ private'で保護されるよりも、サブクラスからアクセスできなくなるよりも –

答えて

0

例1は問題ありません。
[super init]は、サブクラスのinitメソッドから呼び出す必要があります。

- (id) init { 
    self = [super init]; 
    if (self) { 
     // Init 
    } 
    return self; 
} 
関連する問題