我似乎找不到这个答案。
在基类中我定义了这个
@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
'实现。
这样做的正确方法是什么?
答案 0 :(得分:2)
实例变量_foo
对于基类的实现是私有的,因此无法在子类中访问它。
但是有一些解决方法:
您可以将foo存储为受保护的实例变量然后直接从子类访问它:
@interface BaseClass : NSObject
{
@protected NSInteger _foo;
}
@property (nonatomic, assign) NSInteger foo;
@end