Objective-C では、クラスの指定された初期化子が常に確実に呼び出されるという規則があるという事実を信頼できますか? それとも、いくつかの例外を除いて、ほぼ常に正しいと言えるでしょうか? たとえばUIView
、ドキュメントには次のように記載されています。
initWithFrame:
プログラムでビュー オブジェクトを作成する場合、このメソッドは UIView クラスの指定された初期化子です。サブクラスは、このメソッドをオーバーライドしてカスタム初期化を実行できますが、実装の最初に super を呼び出す必要があります。
Interface Builder を使用してインターフェイスを設計する場合、ビュー オブジェクトが後で nib ファイルから読み込まれるときに、このメソッドは呼び出されません。nib ファイル内のオブジェクトは再構成され、initWithCoder: メソッドを使用して初期化されます。
または、プログラムによる場合、ルールは常に適切に設計されたクラスに適用されるべきであると言えますが、Interface Builder は、プログラム以外の方法でオブジェクトを一種の「復活」または構築するため、少し異なります。もしそうなら、私たちが iOS プログラミングを行うとき、それらは一般的に他の例外ですか?