将受保护的 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"]
}
我正在子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"]
}