【问题标题】:Why does cocoa use delegates rather than inheritance?为什么可可使用委托而不是继承?
【发布时间】:2010-01-14 22:56:51
【问题描述】:

为什么可可使用委托而不是继承?

【问题讨论】:

  • 我对 obj-/cocoa 了解得不够多,无法在债务中回答这个问题(肯定会有很好的答案),但 iirc 的主要论点是使用委托允许“更松散”的耦合,然后使用 (多重)继承(在 obj-c 中是不可能的)。
  • 什么是iirc?我没听说过。
  • 这是ChristopheD的完美答案,您应该这样发布

标签: cocoa inheritance delegates


【解决方案1】:

使用委托,您可以让一个对象成为许多其他对象的委托。例如,您可以让您的 MyController 实例成为 NSTableView、NSTextField、NSWindow 以及构成您界面的任何其他对象的委托。这提供了一个紧凑的位置来放置与 UI 的一个部分相关的所有用户界面代码。

如果您使用子类化来做到这一点,则必须为每个想要回调的对象创建一个子类。

另外,这是一个经典的inheritance vs composition问题

【讨论】:

  • 我想这真的只是继承与组合的问题
  • 在界面中为多个对象编写一个控制器的好处
【解决方案2】:

通常,创建子类可能是一个耗时的过程,需要大量的基础工作,并覆盖各种模板方法。

同时,使用委托可以创建一个简单的对象来回答一些特定的问题或以各种方式做出反应。

现在,当您将其与动态交换委托所获得的动态结合起来时,它可以创建一个非常灵活的健壮系统,从而促进更多的代码重用。

关于herehere 这些事情有一些一般性的讨论。您还可以找到一些较旧的 SO 问题 herehere

【讨论】:

  • 如何创建模板比创建子类花费更少的精力?另一方面,动态换出的能力在某些情况下可能很有用,但我不明白为什么 Cocoa 需要它。
  • 我什至不太确定它的工作量是否减少,但较少的继承级别会导致设计更简单。简单是一件好事(tm)。
  • 至于必要性。没有什么是绝对必要的,框架设计者认为,考虑到语言的限制,通过委托进行组合是他们可以做出的最佳设计选择。在其中工作了大约一年后,我倾向于同意那里的选择是一个不错的选择。但是当我第一次从其他语言来到 Cocoa 时,对我来说有点奇怪。
【解决方案3】:

【讨论】:

  • 如果您不打算详细说明,不妨发表评论。如果这些链接像第一个一样失效,会发生什么?
  • 委托简化了对象行为的自定义,同时最大限度地减少了类之间的耦合。继承是在编译时定义的,委托不受这样的限制,可以在运行时完成。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-10-24
  • 2019-01-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-29
  • 1970-01-01
相关资源
最近更新 更多