2

我有一堂课:

@interface BasicDescription : NSObject

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

第二类:

@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];
}

但是有没有更好的方法来做到这一点?现在我必须查看我所有的属性并为每个属性调用 setter。

4

3 回答 3

4

您初始化对象的方式还不错,如果它满足您的要求,您可以以这种方式离开......但是看看在这种情况下最好的选择是构建器模式。

于 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 回答