从父类重写属性setter

时间:2015-08-02 01:38:10

标签: objective-c properties

我似乎找不到这个答案。

在基类中我定义了这个

@property (nonatomic, assign) NSInteger foo;

并拥有自定义设置器

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

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

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

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

1 个答案:

答案 0 :(得分:2)

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

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