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

时间:2015-02-08 14:14:30

标签: ios objective-c subclass instance-variables

我正在继承一个pod的类,在这个类中有一个私有的实例变量,我想在我的类中公开和使用它:

@interface MySuperClass () {
    UIScrollView *_scrollView;
}

通常在暴露私有成员或方法的情况下,我会使用像之前提到的here之类的类别,但我在使用私有实例变量时遇到问题。我读过here关联引用可能有用,但我无法使它工作。

2 个答案:

答案 0 :(得分:6)

尝试在子类中实现:

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

答案 1 :(得分:-1)

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

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

这是由于语言的设计,我认为.m文件实际上是实现文件的方式是有道理的,其他类实际上并不应该关心另一个的实现,即使是继承关系,如子类化。

使用该pod类的私有实例变量的选项是将其放在属性中,或者实际实现 category ,您可以在其中添加访问它的方法。