【发布时间】:2009-05-09 22:21:32
【问题描述】:
在阅读了大量博客、论坛条目和几个 Apple 文档后,我仍然不知道在 Objective-C 中进行大量子类化是否明智。
以下面的案例为例:
假设我正在开发一款益智游戏 有很多元素。所有这些 元素共享一定数量的 相同的行为。然后,在我的 元素的集合,不同 元素组共享相等 行为,区分群体 团体等...
所以,在确定继承什么之后 从什么开始,我决定子类化 的遗忘。为什么不呢? 考虑到易于调整一般 这个模型的行为,我 认为我完成了一些面向对象的事情 意味着。
但是, - 这就是我的问题的来源 - Apple 提到使用委托、数据源方法和非正式协议来支持子类化。这真的让我难以置信,为什么?
似乎有两个阵营。那些支持子类化的,那些不支持的。这显然取决于个人口味。 我想知道大规模子类化和不大规模子类化的优缺点是什么?
总结一下,我的问题很简单:我说的对吗?为什么或为什么不?
【问题讨论】:
-
Kriem,Apple 谈论的是总体上使用 Cocoa,与 Objective-C 无关。对于每个单独的项目,您必须决定如何最好地设置您的应用程序和代码库。在 Apple 的案例中,他们已经使用 MVC 和 IoC 范例设置了 Cocoa(尤其是 AppKit/UIKit),因此他们建议您不要在可以使用委托时自己继承诸如 NSControl 等之类的东西。总结一下:这个警告是专门针对 Cocoa 框架的,一般来说不是针对 Objecive-C 的。
-
@Jason:这是一个很好的答案,为什么只留下一个简单的评论?
-
没有 Cocoa 的 Objective-C?我敢肯定世界上有近五个人在使用它。
-
@Kriem - Chuck 可能只是意味着大多数人将 Objective-C 与 Cocoa 一起使用,但这仍然不是重点。如果这对您的解决方案最有效,请随意设计您的游戏/拼图/任何带有大量子类的东西。 Cocoa 框架本身被设计成不需要子类化,仅此而已。
-
这个问题已经存在多年,但似乎没有提到深层层次结构最明显的问题。世界很少像问题所暗示的那样完全分裂。当你的元素有点像子类 A 和子类 B 时,你会怎么做?如果你在发现这个组件时已经有了很深的层次结构,那么它就是一个真正的 PITA 来处理。
标签: objective-c oop subclass