3

根据文档,我创建了一个自定义子类,NSTextFieldCell其唯一目的是覆盖方法setUpFieldEditorAttributes:

文档没有提到NSTextFieldCell's 或其超类的任何初始化程序NSActionCell,但文档NSCell明确提到:

当子类化 NSCell 时,你必须实现所有指定的初始化器。这些方法是:init、initWithCoder:、initTextCell: 和 initImageCell:。

现在,由于我在自定义子类中并没有真正做任何事情,除了覆盖 Cocoa 类中的显式覆盖点,创建 4(!)只调用其超类实现的初始化器真的有什么意义吗?

由于init...Objective-C 中方法的冗长特性,这将使实现中的代码行数增加五倍,要编写的注释数量(和阅读,对于这类事情的人来说)和通常维护的数量。

我知道我本可以在我写这篇文章的时候创建这些方法,但我真的想知道是否存在只调用 super 的方法有什么不同?

编辑添加:

我误读了NSTextFieldCell文档,其中还指出必须实现所有指定的初始化程序,但问题仍然存在 - 3(init不知何故作为指定初始化程序在继承链中消失了)只调用 super 的初始化程序真的有什么不同吗?

4

1 回答 1

1

在 Apple 的“DragNDropOutlineView”示例代码中,他们实现了“ImageAndTextCell”,这是 NSTextFieldCell 的自定义子类。

在其中,他们覆盖的唯一初始化程序是

-(id) init

NSTextFieldCell 显然会为您处理其他的。

而且,正如您所说,仅仅为了调用超类而覆盖超类的方法是浪费时间,因为如果您不覆盖它,运行时就会这样做。

于 2012-06-05T00:17:33.393 回答