71

重複の可能性:
Objective-C の alloc、init、および new

[Class new]と について少し混乱してい[[Class alloc] init]ます。contentと を使用し[Class new]て オブジェクトを定義しました[[Class alloc] init]

(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]ですか? 何か違いがあるに違いないと思います。

両者の違い、メリット、デメリットを教えてください。

4

3 に答える 3

134

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

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

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

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

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

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

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

結論として言えるのは、

alloc は init と一緒です

new = alloc + init

于 2012-06-29T05:03:35.383 に答える
29

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

于 2012-06-29T05:03:16.920 に答える
9

ここで:Objective-Cのalloc、init、およびnew

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

于 2012-06-29T05:01:13.377 に答える