2012-06-02 38 views
3

根据文档,我创建了一个自定义子类NSTextFieldCell,其唯一目的是覆盖方法setUpFieldEditorAttributes:是否有必要实现NSTextFieldCell子类的所有初始化器?

的文档不提任何初始化为NSTextFieldCell的还是它的超类NSActionCell,但NSCell的文件明确提到:

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

现在,因为我没有做任何事情的自定义子类,除了覆盖在可可类明确的覆盖点,是真的在创造4(!)初始化任何点只调用它们的超类实现?

由于Objective-C中init...方法的详细性质,这可能会使实现中的代码行数增加五倍,写入(以及读取,让人们进入该类事物)的注释数量并且通常会维护。

我知道我可以在写这篇文章的时候创建这些方法,但是我真的怀疑刚刚调用super的方法是否存在差异?

编辑补充:

我误读了NSTextFieldCell文档,这也说明,所有的指定初始化的必须实施,但问题仍然有效 - 做3(init莫名其妙地消失了作为指定初始化下来继承链)初始化器,只是叫超级真的有什么区别?

回答

1

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

在这里面,它们将覆盖仅初始化是

-(id) init 

NSTextFieldCell显然处理别人给你的。

而且,正如你所说的,重写超类的方法只是调用超类是浪费时间,因为如果你不重写它,运行时会这样做。

+0

好抓!我甚至已经翻了几遍这个例子,但没有想到这方面。然而'init'似乎不是一个指定的初始值设定项,所以它证实了我的怀疑,他们的意思是说,如果你触摸某个指定的初始值设定项,你必须确保它们全部与你的改变同步。只是一个不幸的措辞。 – Monolo

+0

我同意文档的措辞很不明确。 –

相关问题