子类化和属性赋值

时间:2012-08-05 15:34:50

标签: objective-c ios

我有一个班级:

@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。

3 个答案:

答案 0 :(得分:4)

初始化对象的方式也不错,如果它满足您的要求,您可以这样离开...但是请看一下Builder Pattern这种情况下最好的选择。

答案 1 :(得分:0)

假设您有许多这样的属性,更好的方法是使用包含所有默认值的可变字典,并在每个新对象上设置它。然后,您可以修改子类或用户想要更改的值。

答案 2 :(得分: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;
}