我有一个类型A为实例变量的类X。
@interface A : NSObject {
X *x;
}
@end
一些X实例还符合协议P。我想A为这些X实例实现一个专门的版本。
@interface B : A {
X <P> *x;
}
@end
这编译得很好。但是,当我x从B实例访问时,更改不会传播到A. 因此,A未重新定义的函数使用X的函数以外的其他实例B。
仅添加协议时,是否可以以某种方式重新定义实例变量? 关于子类有一个类似的问题。但是,子类和协议是不一样的。虽然我的方法编译得很好,但它并没有按预期工作。
如果不可能:是否有执行此操作的通用模式?
如果我不使用新类型覆盖实例变量,那么代码中就会充满丑陋的东西:
[((X <P> *)x) methodOfP]如果我覆盖实例变量,我必须自己将更改传播到超类
A。这需要额外的功能。使用属性而不是实例变量:这会成功吗?可以在子类中重新定义属性吗?
@interface A : NSObject { X *x; } @property (strong, nonatomic) X *x; @end @implementation A - (X *)x { return x; } - (void)setX:(X *)anX { x = anX; } @end @interface B : A @property (strong, nonatomic) X <P> *x; @end @implementation B @end