web-dev-qa-db-ja.com

iOSの[Class new]と[[Class alloc] init]の違いは何ですか?

可能性のある複製:
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]を使用するのですか?何らかの違いがあるに違いないと思います。

両方の違い、長所と短所を親切に説明してください。

68
Prasad G

Alloc: NSObjectのクラスメソッド。受信クラスの新しいインスタンスを返します。

Init:NSObjectのインスタンスメソッド。サブオブジェクトによって実装され、メモリが割り当てられた直後に新しいオブジェクト(レシーバー)を初期化します。

新規:NSObjectのクラスメソッド。受信クラスの新しいインスタンスを割り当て、初期化メッセージを送信し、初期化されたオブジェクトを返します。

リリース:NSObjectデリゲートのインスタンスメソッド。受信者の参照カウントを減らします。

Autorelease:NSObjectデリゲートのインスタンスメソッド。レシーバーを現在の自動解放プールに追加します。

Retain: NSObjectデリゲートのインスタンスメソッド。受信者の参照カウントを増やします。

コピー: NSObjectデリゲートのインスタンスメソッド。受信者のコピーである新しいインスタンスを返します。

結論として、私たちはそれを言うことができます

allocはinitと一緒になります

new = alloc + init

130
Shantanu

+newメソッドは、単に+allocおよび-initの短縮形です。所有権のセマンティクスは同じです。 +newを使用する唯一の利点は、簡潔であることです。クラスの初期化子に引数を提供する必要がある場合は、代わりに+allocおよび-initWith...メソッドを使用する必要があります。

29
dreamlax

ここ: alloc、init、およびObjective-Cの新機能

基本的に、それは現代対従来の問題です。新規に対するinitの最も直接的な利点は、多くのカスタムinitメソッドがあることです。

9
Cehhiro