2012-06-02 74 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

我同意文檔的措辭很不明確。 –

相關問題