【问题标题】:Understanding inheritance of Objective-C instance variables理解 Objective-C 实例变量的继承
【发布时间】: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

如何在AB 之间共享变量x

【问题讨论】:

  • 顺便说一句,不要在生产代码中使用 assert()。至少,使用 NSAssert,它会在调试时编译为断言,并在发布时被清除。
  • 导致您失败的原因不在您发布的代码中。我将它与 X 的基本空定义一起复制并粘贴到一个类中,并且看不到任何错误。 (即“x”可见且正确。)
  • @Etan 谢谢,我不知道。猜猜我有一些代码要更改:)

标签: objective-c inheritance scope instance-variables protected


【解决方案1】:

再次检查您的代码。甚至再一次。这段代码一定可以工作,真的……这是继承接口和父接口之间的一种基本关系,它应该像你期望的那样运行。

它必须是您从示例中剥离的代码中的某些内容。

【讨论】:

    猜你喜欢
    • 2012-11-05
    • 1970-01-01
    • 2013-08-16
    • 2013-02-02
    • 2023-04-04
    • 1970-01-01
    • 2019-07-17
    • 1970-01-01
    • 2012-12-03
    相关资源
    最近更新 更多