配列(またはそれぞれのファクトリメソッドを使用する他のコレクション)を作成することの長所と短所は何ですか
[[NSArray alloc] init]
対
[NSArray array]
目的Cで?後者のファクトリ メソッドを使用すると、メモリ管理について心配する必要がないように思われるので、alloc + init を使用する意味があるかどうかに興味がありましたが、今ではこれら 2 つの違いすべてと、なぜ 1 つがどちらかを選択します。
配列(またはそれぞれのファクトリメソッドを使用する他のコレクション)を作成することの長所と短所は何ですか
[[NSArray alloc] init]
対
[NSArray array]
目的Cで?後者のファクトリ メソッドを使用すると、メモリ管理について心配する必要がないように思われるので、alloc + init を使用する意味があるかどうかに興味がありましたが、今ではこれら 2 つの違いすべてと、なぜ 1 つがどちらかを選択します。
ARC の前には、決定的な違いがありました。alloc/init
ケースは保持されたオブジェクトを返しましたが、ケースarray
は自動解放されたオブジェクトを返しました。
ARC では、違いはそれほど重要ではありません。おそらく最初のケースはより効率的な髪ですが、ほとんどのシナリオでは交換可能です.
最初のものでは、配列オブジェクトの所有権があり、それらを解放する必要があります。
NSMutableArray* p = [[NSMutableArray alloc] init];
[p リリース];
&配列オブジェクトの所有権がないため、解放する必要のない最後のもの。
NSMutableArray* p = [NSMutableArray]; //this is autoreleased
これで release を呼び出すと、アプリケーションがクラッシュします。