向子类公开受保护的Objective-C实例变量



我正在对pod的类进行子类化,在这个类中有一个私有实例变量,我想在我的类中公开并使用它:

@interface MySuperClass () {
    UIScrollView *_scrollView;
}

通常在公开私有成员或方法时,我会使用前面提到的类别,但我在使用私有实例变量时遇到了问题。我在这里读到关联引用可能会起作用,但我没能让它起作用。

尝试在子类中实现:

- (UIScrollView *)scrollView {
    return [self valueForKey:@"_scrollView"]
}

不幸的是,在Objective-C中没有办法声明私有实例变量。

无论您希望子类能够看到什么,都必须在.h-文件中声明。您所讨论的关联引用以完全相同的方式工作,但它们解决了不同的问题,即在类别中声明实例变量的问题。

这是由于该语言的设计,我认为.m文件实际上是实现文件,并且任何其他类实际上都不应该关心另一个类的实现,即使具有子类之类的继承关系。

对于该pod类的私有实例变量,您可以选择将其放在一个属性中,或者确实实现一个类别,在其中添加访问它的方法。

最新更新