ARCとのプロジェクトがあります。
中にオブジェクトがNSArray
あります。ある時点で、配列内のオブジェクトを変更する必要があります。
NSMutableArray
私がやる:
[array removeAllObjects];
そして、このメソッドは配列に含まれるすべてのオブジェクトを解放すると確信しています。しかし、NSArrayではそれができません!だから、私の質問は、配列をnil
に設定してから再初期化すると、配列に含まれている古いオブジェクトが実際にメモリから解放されるということです。
array = nil;
array = [[NSArray alloc] initWithArray:newArray];
または、NSMutableArray
を使用する必要がありますか?
あなたはこれを行うことができます:
array = newArray;
これにより、array
が解放されます。このNSArray
の割り当てが解除されると、含まれているすべてのオブジェクトも解放されます。
古い配列への強い参照がなくなると、古い配列の割り当てが解除されます。強い参照が1つしかない場合は、array
を別の値に設定すると、すぐに割り当てが解除されます。
古い配列の割り当てが解除されると、配列に含まれるすべてのオブジェクトが解放されます。それらのオブジェクトへの他の強い参照がない場合、それらもすぐに割り当て解除されます。
新しいアレイに設定する前にarray = nil
を設定する必要はありません。
割り当てと割り当て解除のオーバーヘッドが再び発生しないため、NSMutableArrayをお勧めします