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

Expose a protected Objective-C instance variable to subclass

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

@interface MySuperClass () {
    UIScrollView *_scrollView;
}

通常在公开私有成员或方法时,我会使用像之前提到的那样的类别 here, but I am having a problem doing it with a private instance variable. I read here 关联引用可能会起作用,但我无法使其起作用。

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

无论你想让你的子class看到什么,你都必须在你的.h文件中声明。您所说的关联引用以完全相同的方式工作,但它们解决了一个不同的问题,即在 category.

中声明实例变量的问题

这是由于语言的设计,我想这是有道理的,因为 .m 文件实际上是 实现 文件,而不是其他 class 实际上应该关心另一个的实现,即使有像 subclassing.

这样的继承关系

使用该 pod 的 class 的私有实例变量的选项是将其放入 属性 或确实实现 类别在哪里添加方法来访问它。

尝试在 child class 中实施:

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