【发布时间】:2012-06-09 16:22:22
【问题描述】:
我想通过在B 中子类化来扩展超类A 的方法,使其具有新功能。由于实例变量默认为@protected,因此访问它们应该没问题。但是,我在A 的方法中对实例变量x 所做的更改不会反映到B,反之亦然。
@interface A : NSObject {
X *x;
}
- initWithX:(X *)anX;
@end
@implementation A
- initWithX:(X *)anX
{
assert(anX != nil);
if (self = [super init]) {
x = anX;
}
assert(self != nil);
return self;
}
@end
@interface B : A
@end
@implementation B
- initWithX:(X *)anX
{
assert(anX != nil);
if (self = [super initWithX:anX]) {
assert(x != nil); <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< FAILS
}
return self;
}
@end
如何在A 和B 之间共享变量x?
【问题讨论】:
-
顺便说一句,不要在生产代码中使用 assert()。至少,使用 NSAssert,它会在调试时编译为断言,并在发布时被清除。
-
导致您失败的原因不在您发布的代码中。我将它与 X 的基本空定义一起复制并粘贴到一个类中,并且看不到任何错误。 (即“x”可见且正确。)
-
@Etan 谢谢,我不知道。猜猜我有一些代码要更改:)
标签: objective-c inheritance scope instance-variables protected