无法从子类访问合成的iVar

时间:2017-07-27 15:58:48

标签: objective-c properties instance-variables access-control

我有以下代码,它给出了编译器错误"Instance Variable '_someBool' is prive"

@interface Foo: NSObject
@property (assign) BOOL someBool;
@end
@implementation Foo
@end

@interface Bar: Foo
@end
@implementation Bar
- (BOOL)someBool {
    // subclass specific getter logic
    return _someBool;
}
@end

为什么我无法访问继承的属性的存储?什么是覆盖这个getter的正确方法?

1 个答案:

答案 0 :(得分:1)

getter只是一种方法,如果您希望覆盖方法并调用其原始实现,则使用super

- (BOOL)someBool
{
   // subclass specific getter logic
   return [super someBool];
}
  

为什么我无法访问已继承的属性的存储空间?

是私人的。如果确实想要从子类访问存储,则通过声明@protected实例变量并使用@synthesise property=variable来指定您自己的存储。使用super可能更好。