2

Objective Cでは、変数を初期化するためにinitメソッドを上書きする必要がありますか?変数がプロパティである場合でも、初期値を設定する通常の方法でそれらにアクセスできますか?

4

4 に答える 4

3

Objective Cでは、変数を初期化するためにinitメソッドを上書きする必要がありますか?

はい。具体的には、指定された初期化子です。

サブクラスは、別の構築ステージ(viewDidLoadなど)を指定する場合もあります。また、オブジェクトのメモリは割り当て時にゼロになるため、明示的に0 / nilに設定する必要はありません(読みやすい場合を除く)。

変数がプロパティである場合でも、初期値を設定する通常の方法でそれらにアクセスできますか?

オブジェクトのインスタンスメソッド/アクセサーの使用を避け、部分的に構築された状態(特に初期化子とdealloc)で直接ivarにアクセスする必要があります。避けたい副作用がいくつかあります-例はこちら;

于 2012-05-22T14:54:28.990 に答える
1

ビューコントローラのviewDidLoadメソッドで変数を初期化できます。

于 2012-05-22T14:46:02.997 に答える
1

クラスインターフェイスで宣言された変数は、デフォルト値に自動的に初期化されます。整数値の場合は0、クラスとポインタの場合はnil/NULLです。変数を他の値に初期化する必要がある場合は、クラスの保証されたエントリポイントをオーバーライドする必要があります。NSObjectたとえば、から継承するカスタムクラスは、単にオーバーライドしますinit。ファイルからロードされたViewControllerを使用している場合は、NIBオーバーライドinitWithCoder:するか、– awakeFromNib。継承元のクラスのドキュメントを常に確認し、そのクラスの指定された初期化子を見つける必要があります。場合によっては、共通の初期化メソッドを設定して、さまざまな初期化子から呼び出す必要があります。また、プロパティでもある変数がある場合は、変数を直接設定するのではなく、プロパティを設定することをお勧めします。

于 2012-05-22T14:50:23.650 に答える
0

変数を初期化するためにinitメソッドを上書きする必要がありますか?

インスタンス変数:はい。ただし、デフォルトではすでに0 / nil/falseに初期化されています。

変数がプロパティである場合でも、初期値を設定する通常の方法でそれらにアクセスできますか?

はい、できます。サブクラスがセットアクセサーをオーバーライドして予期しないことをする危険があるため、Appleはこれに反対するようアドバイスしています。実際には、これが問題になることはめったにありません。

于 2012-05-22T14:48:55.357 に答える