Objective Cでは、変数を初期化するためにinitメソッドを上書きする必要がありますか?変数がプロパティである場合でも、初期値を設定する通常の方法でそれらにアクセスできますか?
4 に答える
Objective Cでは、変数を初期化するためにinitメソッドを上書きする必要がありますか?
はい。具体的には、指定された初期化子です。
サブクラスは、別の構築ステージ(viewDidLoadなど)を指定する場合もあります。また、オブジェクトのメモリは割り当て時にゼロになるため、明示的に0 / nilに設定する必要はありません(読みやすい場合を除く)。
変数がプロパティである場合でも、初期値を設定する通常の方法でそれらにアクセスできますか?
オブジェクトのインスタンスメソッド/アクセサーの使用を避け、部分的に構築された状態(特に初期化子とdealloc)で直接ivarにアクセスする必要があります。避けたい副作用がいくつかあります-例はこちら;
ビューコントローラのviewDidLoadメソッドで変数を初期化できます。
クラスインターフェイスで宣言された変数は、デフォルト値に自動的に初期化されます。整数値の場合は0、クラスとポインタの場合はnil/NULLです。変数を他の値に初期化する必要がある場合は、クラスの保証されたエントリポイントをオーバーライドする必要があります。NSObject
たとえば、から継承するカスタムクラスは、単にオーバーライドしますinit
。ファイルからロードされたViewControllerを使用している場合は、NIB
オーバーライドinitWithCoder:
するか、– awakeFromNib
。継承元のクラスのドキュメントを常に確認し、そのクラスの指定された初期化子を見つける必要があります。場合によっては、共通の初期化メソッドを設定して、さまざまな初期化子から呼び出す必要があります。また、プロパティでもある変数がある場合は、変数を直接設定するのではなく、プロパティを設定することをお勧めします。
変数を初期化するためにinitメソッドを上書きする必要がありますか?
インスタンス変数:はい。ただし、デフォルトではすでに0 / nil/falseに初期化されています。
変数がプロパティである場合でも、初期値を設定する通常の方法でそれらにアクセスできますか?
はい、できます。サブクラスがセットアクセサーをオーバーライドして予期しないことをする危険があるため、Appleはこれに反対するようアドバイスしています。実際には、これが問題になることはめったにありません。