2

私はクラスを持っています:

@interface BasicDescription : NSObject

@property (strong,nonatomic) NSString *author;
@property (assign,nonatomic) NSInteger year;
@property (strong,nonatomic) NSString *owner;

そして2番目のクラス:

@interface AdvDescModel : BasicDescription

-(id)initWithBasicModel:(BasicDescription*)basicModel;

だから私の質問は、新しいオブジェクトを作成するときにすべてのプロパティを割り当てる方法です。今私が持っています

AdvDescModel *adv = [AdvDescModel alloc] initWithBasicModel:basic];

そして、初期化子で:

-(id)initWithBasicModel:(BasicDescription*)basicModel {

    if(self = [super init]) {
        [self setAllParams:basicModel];
    }
    return self;
}

-(void)setAllParams:(BasicDescription*)bModel {

    [self setAuthor:bModel.author];
    [self setYear:bModel.year];
    [self setOwner:bModel.owner];
}

しかし、これを行うためのより良い方法はありませんか?今、私はすべてのプロパティを監視し、それらすべてのセッターを呼び出す必要があります。

4

3 に答える 3

4

オブジェクトを初期化する方法は悪くありません。要件が満たされている場合は、この方法で残すことができます...ただし、このような状況で最善の策となるBuilderパターンを見てください。

于 2012-08-05T15:41:09.447 に答える
0

そのようなプロパティが多数あると仮定すると、それを行うためのより良い方法は、すべてのデフォルト値で可変ディクショナリを使用し、それを新しいオブジェクトごとに設定することです。次に、サブクラスまたはユーザーが変更したい値を変更できます。

于 2012-08-05T15:40:29.037 に答える
0

独自のプロパティを担当するクラスを用意する方がはるかに良い方法だと思うので、次のようAdvDescModelなイニシャライザーを用意することをお勧めします...

-(id)initWithBasicModel:(BasicDescription*)basicModel {

    if(self = [super initWithBasicModel:basicModel]) {
        ;  // Anything specific to the subclass
    }
    return self;
}

...そして親は:

-(id)initWithBasicModel:(BasicDescription*)bModel {

    if(self = [super init]) {
        [self setAuthor:bModel.author];
        [self setYear:bModel.year];
        [self setOwner:bModel.owner];
    }
    return self;
}
于 2012-08-05T15:47:30.893 に答える