3

NSTextFieldCellドキュメントに従って、 method をオーバーライドすることのみを目的として のカスタム サブクラスを作成しましたsetUpFieldEditorAttributes:

NSTextFieldCellドキュメントには、またはそのスーパークラスの初期化子については言及されていませんNSActionCellが、ドキュメントにはNSCell明示的に言及されています。

NSCell をサブクラス化するときは、指定されたすべての初期化子を実装する必要があります。これらのメソッドは、init、initWithCoder:、initTextCell:、initImageCell: です。

カスタム サブクラスでは、Cocoa クラスの明示的なオーバーライド ポイントをオーバーライドする以外は何もしていないので、スーパー クラスの実装のみを呼び出す 4(!) イニシャライザを作成する意味はありますか?

Objective-Cのメソッドの冗長な性質によりinit...、これは実装のコード行、書き込み (およびその種のことを行う人々にとっては読み取り) および一般的に維持するコメントの数を 5 倍にします。

これを書くのにかかった時間内にこれらのメソッドを作成できたことはわかっていますが、単に super を呼び出すメソッドの存在が何か違いがあるのでしょうか?

追加するために編集:

すべての指定されたイニシャライザを実装する必要があると述べているドキュメントを読み間違えましたNSTextFieldCellが、問題はまだ残っていますinit.superを呼び出すだけの3つのイニシャライザ(継承チェーンの指定されたイニシャライザとしてどういうわけか姿を消しました)は本当に違いますか?

4

1 に答える 1

1

Apple の "DragNDropOutlineView" サンプル コードでは、NSTextFieldCell のカスタム サブクラスである "ImageAndTextCell" を実装しています。

その中で、それらがオーバーライドする唯一の初期化子は

-(id) init

NSTextFieldCell は明らかに他のものを処理します。

そして、あなたが述べているように、単にスーパークラスを呼び出すためにスーパークラスのメソッドをオーバーライドするのは時間の無駄です。とにかくオーバーライドしないとランタイムがそれを行うからです。

于 2012-06-05T00:17:33.393 に答える