web-dev-qa-db-ja.com

NSArrayからオブジェクトを削除します

ARCとのプロジェクトがあります。

中にオブジェクトがNSArrayあります。ある時点で、配列内のオブジェクトを変更する必要があります。

NSMutableArray私がやる:

[array removeAllObjects];

そして、このメソッドは配列に含まれるすべてのオブジェクトを解放すると確信しています。しかし、NSArrayではそれができません!だから、私の質問は、配列をnilに設定してから再初期化すると、配列に含まれている古いオブジェクトが実際にメモリから解放されるということです。

array = nil;
array = [[NSArray alloc] initWithArray:newArray];

または、NSMutableArrayを使用する必要がありますか?

12
Fry

あなたはこれを行うことができます:

array = newArray;

これにより、arrayが解放されます。このNSArrayの割り当てが解除されると、含まれているすべてのオブジェクトも解放されます。

11
Andreas Ley

古い配列への強い参照がなくなると、古い配列の割り当てが解除されます。強い参照が1つしかない場合は、arrayを別の値に設定すると、すぐに割り当てが解除されます。

古い配列の割り当てが解除されると、配列に含まれるすべてのオブジェクトが解放されます。それらのオブジェクトへの他の強い参照がない場合、それらもすぐに割り当て解除されます。

新しいアレイに設定する前にarray = nilを設定する必要はありません。

4
rob mayoff

割り当てと割り当て解除のオーバーヘッドが再び発生しないため、NSMutableArrayをお勧めします

1
Techie Manoj