0

スーパークラスResource

@interface Resource : CoderObject

@property (strong, nonatomic) NSString *resourceID;
@property (assign, nonatomic) ResourceType resourceType;
@property (assign, nonatomic) DataType dataType;

@end

サブクラスViewResource

@interface ViewResource : Resource

@property (strong, nonatomic) CustomView *view;
@property (strong, nonatomic) UIViewController *viewController;

@end

サブクラスViewResourceのメソッドで、変数initにアクセスする方法は? 今、私はただ使用しようとしていますResourcedataTypesuper.dataType = ...

他の方法はありますか?

4

2 に答える 2

2

を使用するだけですself.dataType。サブクラスには、.h ファイルで定義されたすべてのスーパークラス プロパティが完全に表示されます。を使用self.xxxすると、将来必要に応じて、すべての使用法コードを編集しなくても、アクセサー メソッドをオーバーライドすることができます。

以下のリンクを見ると、かなり公平です。それらはすべて有効なポイントです。アクセサーには副作用があってはなりませんが、副作用がないことを保証することはできません。プロパティがスーパークラスとして定義されている場合、いくつかのオプションがあります。

  1. self.xxxプロパティを設定し、副作用がないことを確認するために使用します
  2. super で init メソッドを呼び出し、必要なパラメーターを渡し、そこに設定します
于 2013-05-18T09:39:43.117 に答える
0

ウェインが彼の回答で述べたように、スーパーのクラスメンバーに直接アクセスできます(プライベートでない場合)。

self.propertyそして、あなたのinitがこのように見える限り、initメソッドを呼び出すことに問題はありません

-(id)initAndTheNameYoWantAndMaybeSomeParameters:(NSString *)paramExample {
    self = [super initNameOfAnInitMethodFromSuperClass];
    //check if the init was with success
    if(self != nil) {
       self.myStringProp = paramExample;
       //or
       self.propertyFromSuper = paramExample;
    }
}

はい、initMethods で愚かなことを行うこともできます (私は以前にそれを行いました:)))同じ initMethod をその内部から呼び出し、再帰呼び出しを生成してアプリをクラッシュさせていました。(この問題を見つけやすい)

于 2013-05-18T10:08:30.567 に答える