【问题标题】:Expose a protected Objective-C instance variable to subclass将受保护的 Objective-C 实例变量公开给子类
【发布时间】:2015-04-08 07:33:48
【问题描述】:

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

@interface MySuperClass () {
    UIScrollView *_scrollView;
}

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

【问题讨论】:

  • 你实现this了吗?
  • @Mundi 我试过了,但它对我不起作用,也许我在实现它时犯了一个错误。
  • 我不认为你可以。 anInstanceOfMySuperClass._scrollView 是不可能的,因为点符号用于访问属性。如果你真的想这样做,也许你可以编写一个 setter 和 getter 方法来模拟这种行为。

标签: ios objective-c subclass instance-variables


【解决方案1】:

尝试在子类中实现:

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

【讨论】:

    【解决方案2】:

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

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

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

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

    【讨论】:

    • 我尝试实现一个包含私有实例的类别,但没有成功。
    猜你喜欢
    • 2013-12-05
    • 1970-01-01
    • 2017-06-18
    • 2011-06-19
    • 1970-01-01
    • 2011-05-07
    • 2016-02-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多