【问题标题】:Inheritance In Objective - C?Objective-C中的继承?
【发布时间】:2013-09-26 07:29:37
【问题描述】:

好的,所以我的问题本身就说明了我在问什么。
我有 3 个视图控制器。他们三个都是从一个类(MainViewController)继承的。
现在我想问的是,是否有可能在 Objective C 中假设我有另一个类,它有一些我不想包含在 MainViewController 类中的变量和函数,并将其传递给 ViewController 之一。
所以如果我给我的视图控制器编号,让另一个类是SecondClass。
第 1、第 2 和第 3 视图控制器从 MainViewController 继承函数和变量。
如果我希望 2nd ViewController 也继承 SecondClass,那么我可以在 Objective-C 中执行这种操作吗?

【问题讨论】:

  • 你试过使用UNAVAILABLE_ATTRIBUTE标志吗?
  • @holex 不,我是 Objective C 的初学者,我在学习控制器时遇到了这个问题,所以想问。

标签: ios objective-c inheritance


【解决方案1】:

在目标 C 中,不支持多重继承。相反,您可以使用协议或类别。 此外,您还可以使用动态类型。查看以下链接。 http://support.apple.com/kb/TA45894

【讨论】:

    【解决方案2】:

    Objective-C 不允许多重继承。查看这篇文章,了解使用组合的出色解决方案。

    Objective-C multiple inheritance

    【讨论】:

      【解决方案3】:

      Objective-C 是一种单继承语言。每个类只能从一个超类继承。

      如果您绝对绝望,您可以使用forwardingTargetForSelector: 来解决这个问题,但更简洁且通常更聪明的方法是通过说第二个视图控制器拥有SecondClass 的实例以及作为MainViewController.

      您可以在 UIWebView 中看到 Apple 这样做的示例。它不是UIScrollView 的子类,但它使用滚动视图并通过属性scrollView 向外部参与者公开该实例(从iOS 5 开始)。

      【讨论】:

      • 好的,我想我能理解。谢谢。
      • 顺便提一下,像 Apple 对 UIWebView 和它的 UIScrollView 那样暴露你的内部实现是一种非常糟糕的做法。
      • @TamásZahola,当您不理解某事时,它并不自动意味着这是不好的。所以,我不会这么说。
      • @holex 那么您能否澄清一下,为什么可以公开 UIWebView 使用 UIScrollView 作为其滚动行为的内部实现这一事实?您能否也告诉我,为什么放弃封装原则,让您的接口的消费者依赖您的实现细节是好的;强制 UIWebView 永远坚持使用 UIScrollView?我猜你认为 UIWebView 不知道它的 UIScrollView 可能在做什么也是一件好事,因为对 UIScrollView 的直接调用完全绕过了 UIWebView!
      • @TamásZahola,不管我怎么想。你的问题只是基于错误的基础。问题是UIWebView 不是真正的view,而是controller。班级的名字应该反映这一点,我很确定这个误导性的名字会让你感到困惑。请想象一下,它是一个UIWebContoller(它不存在,但该名称将更好地反映其用途),并且在您将该类“放入”您的 controller-layer 之后,您将了解整个概念,您的所有担忧将立即无关紧要。我希望它回答了你。
      猜你喜欢
      • 1970-01-01
      • 2012-03-10
      • 1970-01-01
      • 2011-05-10
      • 2014-03-08
      • 2016-05-16
      • 2014-04-30
      • 1970-01-01
      相关资源
      最近更新 更多