3

このAppleのドキュメントで指定された初期化子の情報を見つけましたが、理解できないのは、各クラスには指定された初期化子が1つだけ必要ですか?

たとえば、class Ahas initL, initM, initN、 while class Binherits fromclass Aおよび hasの場合はどうなるでしょうかinitX, initY, initZinitXcall [super initL]、およびinitYcall [super initM]、およびinitZcallを使用できないというルールはあります[super initN]か?

つまり、すべての「二次初期化子」が指定された初期化子を呼び出す代わりに、各指定された初期化子がスーパークラスの指定された初期化子である[super initFoo]場所を呼び出します。 initFoo? (そして、これらはすべて から継承されNSObject、 を呼び出すだけself = [super init]です。)

4

2 に答える 2

4

いいえ、obj-cクラスには複数の指定された初期化子が含まれる場合があります。この最も一般的な例は-initWithCoder:vs-initです。前者はオブジェクトのアーカイブを解除するときに使用され、後者は他のすべての初期化に使用されます。

とは言うものの、一般的には、の外に指定された初期化子を1つだけ持つことをお勧めし-initWithCoder:ます。これは、コードの重複を防ぐのに役立ち、すべての初期化で呼び出される場合にサブクラスがオーバーライドする必要があるメソッドを明確にします。しかし、3つの異なる指定された初期化子が必要な場合は、それを妨げるものは何もありません。必ず適切に文書化してください。

于 2013-02-22T21:56:37.020 に答える