Objective-C属性别名

时间:2016-05-19 06:44:49

标签: objective-c inheritance properties

我们假设ParentClass有一个名为a的字符串属性:

@property (nonatomic, strong) NSString *a;

在子类ChildClass中,我希望属性b成为super.a的别名。含义b本身并没有任何价值,只是指向a。 如果a的值发生变化,则应该反映在b中,反之亦然。

在Objective-C中实现这一目标的最简洁方法是什么。

1 个答案:

答案 0 :(得分:0)

你不能这样做别名。但是,属性只是方法实现的简写。子类继承其超类的(可见)属性,因此您可以执行以下操作:

- (void)setB:(NSString *)b {
    self.a = b;
}

- (NSString *)b {
    return self.a;
}

如果子类不可见a,则必须执行以下操作:

- (void)setB:(NSString *)b {
    [self setValue:b forKey:@"a"];
}

- (NSString *)b {
    return [self valueForKey:@"a"];
}

这是有效的,因为在运行时没有类型检查,所以如果属性存在(使用getter和setter的标准名称),你仍然可以使用KVC来操作它。