可能性のある複製:
Objective-Cのalloc、init、およびnew
[Class new]
と[[Class alloc] init]
について少し混乱しています。 [Class new]
と[[Class alloc] init]
を使用してオブジェクトcontent
を定義しました。
(1). NSMutableArray *content = [NSMutableArray new];
(2). NSMutableArray *content = [[NSMutableArray alloc] init];
私の質問は、[Class new]
と[[Class alloc] init]
の違いについてです。私にとって、(1)と(2)は似ています。 (1)と(2)が似ている場合、なぜ[[Class alloc] init]
と比較して、ほとんどの場合[Class new]
を使用するのですか?何らかの違いがあるに違いないと思います。
両方の違い、長所と短所を親切に説明してください。
Alloc: NSObjectのクラスメソッド。受信クラスの新しいインスタンスを返します。
Init:NSObjectのインスタンスメソッド。サブオブジェクトによって実装され、メモリが割り当てられた直後に新しいオブジェクト(レシーバー)を初期化します。
新規:NSObjectのクラスメソッド。受信クラスの新しいインスタンスを割り当て、初期化メッセージを送信し、初期化されたオブジェクトを返します。
リリース:NSObjectデリゲートのインスタンスメソッド。受信者の参照カウントを減らします。
Autorelease:NSObjectデリゲートのインスタンスメソッド。レシーバーを現在の自動解放プールに追加します。
Retain: NSObjectデリゲートのインスタンスメソッド。受信者の参照カウントを増やします。
コピー: NSObjectデリゲートのインスタンスメソッド。受信者のコピーである新しいインスタンスを返します。
結論として、私たちはそれを言うことができます
allocはinitと一緒になります
new = alloc + init
+new
メソッドは、単に+alloc
および-init
の短縮形です。所有権のセマンティクスは同じです。 +new
を使用する唯一の利点は、簡潔であることです。クラスの初期化子に引数を提供する必要がある場合は、代わりに+alloc
および-initWith...
メソッドを使用する必要があります。
ここ: alloc、init、およびObjective-Cの新機能
基本的に、それは現代対従来の問題です。新規に対するinitの最も直接的な利点は、多くのカスタムinitメソッドがあることです。