メモリの割り当てに加えて、allocすべてのインスタンス変数 (変数を除くisa) をゼロまたはゼロと同等の型nil( 、NULL、および0.0.
しかし、私は最近、次のことについて読みましたinit:
初期化は、オブジェクトのインスタンス変数を合理的で有用な初期値に設定します。
「合理的で有用な初期値」が何を意味するのか、少し混乱しています....
allocすでに値をゼロに設定している場合、これらinitの値を何らかの方法で変更していますか?
メモリの割り当てに加えて、allocすべてのインスタンス変数 (変数を除くisa) をゼロまたはゼロと同等の型nil( 、NULL、および0.0.
しかし、私は最近、次のことについて読みましたinit:
初期化は、オブジェクトのインスタンス変数を合理的で有用な初期値に設定します。
「合理的で有用な初期値」が何を意味するのか、少し混乱しています....
allocすでに値をゼロに設定している場合、これらinitの値を何らかの方法で変更していますか?
alloc がすでに値をゼロに設定している場合、init はこれらの値を何らかの方法で変更していますか?
もちろん。
たとえば、幅と高さを表す ivar を持つ四角形を表すオブジェクトがあるとします。では、initこれらの ivar を適切なデフォルト (300x200 など) に初期化できます。
彼らが話しているのはそれだけです。
NSObject の-initメソッドがサブクラスの ivar の値をゼロ以外の値に初期化しているかどうかを尋ねている場合、答えはもちろんノーです。
はい、完全に可能です。たとえば、データ構造には、動的メモリの割り当てと初期化が必要なメンバー変数が含まれている場合があります。alloc呼び出しはメンバー変数用のスペースを予約し、呼び出しinitはそれらの値を有用にします (例えば、サブ割り当てと初期化)。
alloc異なる方法でオブジェクトを初期化するクラスのinit複数のルーチンを持つことができるため、これらは分離されています。init
allocを呼び出すことで、とinitを同時に呼び出すこともできますnew。したがって、次の 2 行は同等です。
[[NSObject alloc] init];
[NSObject new];