根據文檔,我創建了一個自定義子類NSTextFieldCell
,其唯一目的是覆蓋方法setUpFieldEditorAttributes:
。是否有必要實現NSTextFieldCell子類的所有初始化器?
的文檔不提任何初始化爲NSTextFieldCell
的還是它的超類NSActionCell
,但NSCell
的文件明確提到:
當繼承的NSCell您必須實現所有指定 初始化的。這些方法是:init,initWithCoder:,initTextCell:, 和initImageCell :.
現在,因爲我沒有做任何事情的自定義子類,除了覆蓋在可可類明確的覆蓋點,是真的在創造4(!)初始化任何點只調用它們的超類實現?
由於Objective-C中init...
方法的詳細性質,這可能會使實現中的代碼行數增加五倍,寫入(以及讀取,讓人們進入該類事物)的註釋數量並且通常會維護。
我知道我可以在寫這篇文章的時候創建這些方法,但是我真的懷疑剛剛調用super的方法是否存在差異?
編輯補充:
我誤讀了NSTextFieldCell
文檔,這也說明,所有的指定初始化的必須實施,但問題仍然有效 - 做3(init
莫名其妙地消失了作爲指定初始化下來繼承鏈)初始化器,只是叫超級真的有什麼區別?
好抓!我甚至已經翻了幾遍這個例子,但沒有想到這方面。然而'init'似乎不是一個指定的初始值設定項,所以它證實了我的懷疑,他們的意思是說,如果你觸摸某個指定的初始值設定項,你必須確保它們全部與你的改變同步。只是一個不幸的措辭。 – Monolo
我同意文檔的措辭很不明確。 –