我有一个类型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