14

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

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

NSMutableArray私がやる聖霊降臨祭:

[array removeAllObjects];

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

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

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

4

3 に答える 3

13

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

array = newArray;

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

于 2012-10-29T16:55:32.670 に答える
4

古い配列への強い参照がなくなると、古い配列の割り当てが解除されます。あなたがそれへの唯一の強い言及を持っていたなら、あなたがarray何か他のものに設定したとき、それはすぐに割り当て解除されます。

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

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

于 2012-10-29T16:46:37.647 に答える
1

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

于 2012-10-29T16:43:02.200 に答える