是否有必要为NSTextFieldCell子类实现所有初始值设定项?

时间:2012-06-02 07:47:02

标签: objective-c cocoa nstextfield nstextfieldcell

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

文档没有提及NSTextFieldCell或其超类NSActionCell的任何初始值设定项,但NSCell的文档明确提到:

  

当继承NSCell时,您必须实现所有指定的   初始化。那些方法是:init,initWithCoder:,initTextCell:,   和initImageCell:。

现在,由于我在自定义子类中没有做任何事情,除了覆盖Cocoa类中的显式覆盖点之外,创建4(!)初始化器是否真的有任何意义,只能调用它们的超类实现? / p>

由于Objective-C中init...方法的冗长性质,这将使实现中的代码行数增加五倍,写入的注释数量(以及读取,用于人们进行此类事情)并且通常维持。

我知道我可以在我写这篇文章时创建这些方法,但我真的想知道只是调用super的方法的存在是否会产生任何影响?

已编辑添加:

我误读了NSTextFieldCell文档,它们还声明必须实现所有指定的初始值设定项,但问题仍然存在 - 做3(init以某种方式作为继承链中的指定初始化程序消失了)只是打电话给超级的初始化者确实有所作为吗?

1 个答案:

答案 0 :(得分:1)

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

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

-(id) init

NSTextFieldCell显然会为你处理其他人。

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