将受保护的 Objective-C 实例变量公开给子类
Posted
技术标签:
【中文标题】将受保护的 Objective-C 实例变量公开给子类【英文标题】:Expose a protected Objective-C instance variable to subclass 【发布时间】:2015-04-08 07:33:48 【问题描述】:我正在继承一个 pod 的类,在这个类中有一个私有实例变量,我想在我的类中公开和使用它:
@interface MySuperClass ()
UIScrollView *_scrollView;
通常在公开私有成员或方法时,我会使用前面提到的here 之类的类别,但我在使用私有实例变量时遇到了问题。我读到 here 说关联引用可能会起作用,但我无法让它起作用。
【问题讨论】:
你实现this了吗? @Mundi 我试过了,但它对我不起作用,也许我在实现它时犯了一个错误。 我不认为你可以。 anInstanceOfMySuperClass._scrollView 是不可能的,因为点符号用于访问属性。如果你真的想这样做,也许你可以编写一个 setter 和 getter 方法来模拟这种行为。 【参考方案1】:尝试在子类中实现:
- (UIScrollView *)scrollView
return [self valueForKey:@"_scrollView"]
【讨论】:
【参考方案2】:不幸的是,在 Objective-C 中没有办法声明私有实例变量。
无论您希望您的子类能够看到什么,您都必须在您的.h
-文件中声明。您所说的关联引用以完全相同的方式工作,但它们解决了一个不同的问题,即在 category 中声明实例变量。
这是由于语言的设计,我想.m
文件实际上是 实现 文件的方式是有意义的,并且没有其他类实际上应该关心另一个,即使有继承关系,如子类化。
您可以选择使用该 pod 类的私有实例变量,或者将其放入属性中,或者确实实现一个 category,您可以在其中添加访问它的方法。
【讨论】:
我尝试实现一个包含私有实例的类别,但没有成功。以上是关于将受保护的 Objective-C 实例变量公开给子类的主要内容,如果未能解决你的问题,请参考以下文章
Jetty 9.4.38 将受监控的路径(上下文)公开为自己的上下文
在不安装 Java 的情况下将受密码保护的 xlsx 文件读入 R(密码已知)