- 1:いいえ。
- 2: はい。
- a: 議論の余地があります。
- b: はい。
指定された初期化子のポイントは、手元のオブジェクトを適切に設定する方法を知っているのは初期化子であるということです。クラス内の他のすべての初期化子は、指定された初期化子を呼び出す必要があります。そうでない場合、オブジェクトが正しく初期化されていない可能性があります。
Apple の Cocoa ドキュメントでは、複数の初期化子を処理する方法について説明しており、次の内容が含まれています。
通常、初期化パラメーターを完全に補完するクラスの初期化子は、指定された初期化子です。サブクラスの指定された初期化子は、メッセージをスーパーに送信することによって、そのスーパークラスの指定された初期化子を呼び出す必要があります。
これは少しあいまいです。サブクラスの指定された初期化子は、そのスーパークラスの指定された初期化子を呼び出さなければならないように思えます。しかし、それが本意ではないと思います。ここで重要なのは、指定されたイニシャライザが責任を持って、 にメッセージを送信してスーパークラスが適切に初期化されていることを確認することsuper
です。の指定されていないイニシャライザの1 つを呼び出すことによってそれをsuper
行った場合、そのイニシャライザが最終的に指定されたイニシャライザを呼び出すことを条件として、それは問題ありません。そのため、(2)は問題ないと思います。
さらに読むと、次のようになります。
init を含めることができる便利な (または二次的な) 初期化子は、super を呼び出しません。
したがって、ここで彼らが言っているのは、指定されたイニシャライザと他のイニシャライザとの重要な違いは、指定されたイニシャライザが に初期化メッセージを送信する唯一のイニシャライザであるということsuper
です。
(1) に戻ると、 を呼び出す「指定されて[super init]
いない」初期化子がある場合、それは実際には指定されていない初期化子ではありません。あなたのメソッドは、初期化メッセージを に送信することにより、指定されたイニシャライザの責任を負いますsuper
。それは必ずしも問題ではありません.UIViewには2つの指定された初期化子があることに注意してください.