重複の可能性:
alloc と init は実際に何をするのか
[[className alloc] init] のようなコードを実行するため、実際に alloc で何が起こり、init で何が起こるか、私の理解では、alloc はそのクラスのインスタンスを作成し、そのインスタンスにメモリのチャンクを割り当てます。次に、init の使用とは?
前もって感謝します。
重複の可能性:
alloc と init は実際に何をするのか
[[className alloc] init] のようなコードを実行するため、実際に alloc で何が起こり、init で何が起こるか、私の理解では、alloc はそのクラスのインスタンスを作成し、そのインスタンスにメモリのチャンクを割り当てます。次に、init の使用とは?
前もって感謝します。
alloc : 作成するオブジェクトにメモリを割り当て、保持カウントを増やします
init : 作成したオブジェクトを、指定した場合はカスタム値とプロパティで初期化し、それ以外の場合はデフォルト値とプロパティで初期化します
それでは、initの使用は何ですか?
シンプル: alloc がしないことをします (できなかったからです)。カスタムインスタンス変数を初期化し、プロパティをデフォルト値に設定するなど...
alloc メソッドは割り当てを行い、保持カウントを 1 増やします。 +alloc によって返されたものは、どこかで解放する必要があります。
init は、割り当て後にオブジェクトを初期化する責任があります。メッセージ化されたオブジェクトの保持カウントを消費し、保持カウント +1 (1 ではなく「プラス 1」) のオブジェクトを生成します。init から返された結果は、正しく管理するために解放する必要があります。
ちなみに +alloc はクラスメソッドで -init はインスタンスメソッドです