【问题标题】:Overriding property setter from parent class覆盖父类的属性设置器
【发布时间】:2015-08-02 01:38:10
【问题描述】:

我似乎找不到这个问题的答案。

在我定义的基类中

@property (nonatomic, assign) NSInteger foo;

并且有一个自定义设置器

- (void)setFoo:(NSInteger)foo {
    _foo = foo;
    // Do some stuff...
    [self sayHello];
}

到目前为止一切顺利!现在我有一个派生类,并尝试覆盖属性设置器

- (void)setFoo:(NSInteger)foo {
    _foo = foo + 1;
    // Do some different stuff...
    // but avoid calling [self sayHello];
}

编译器在派生类的实现上说Use of undeclared identifier _foo。 这样做的正确方法是什么?

【问题讨论】:

    标签: objective-c properties


    【解决方案1】:

    实例变量_foo 是基类实现的私有变量,因此无法在子类中访问。
    但是有一些解决方法:
    您可以将 foo 存储为受保护的实例变量,然后访问它直接来自子类:

    @interface BaseClass : NSObject
    {
        @protected NSInteger _foo;
    }
    @property (nonatomic, assign) NSInteger foo;
    @end
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-07-28
      • 2015-11-01
      • 2012-03-06
      • 1970-01-01
      • 1970-01-01
      • 2017-08-29
      • 2014-03-11
      相关资源
      最近更新 更多