Удаление объектов из NSArray

У меня есть проект с ARC.

У меня есть NSArray whit некоторый объект внутри. В какой-то момент мне нужно изменить объект в массиве.

Whit a NSMutableArray Я сделаю:

[array removeAllObjects];

и я уверен, что этот метод освободит весь объект, содержащийся в массиве. Но с NSArray я не могу этого сделать! Итак, мой вопрос: если я установил массив в nil, а затем повторно инициализировал его, старый объект, содержащийся в массиве, действительно выпущен из памяти?

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

Или мне нужно использовать NSMutableArray?

Ответ 1

Вы можете просто сделать это:

array = newArray;

Это приведет к освобождению array. Когда этот NSArray будет освобожден, все содержащиеся объекты также будут выпущены.

Ответ 2

Старый массив будет освобожден, если нет более сильных ссылок на него. Если бы у вас была только сильная ссылка на него, тогда, когда вы установите array на что-то другое, оно будет немедленно освобождено.

Когда старый массив будет освобожден, он освободит все объекты, которые он содержит. Если нет других сильных ссылок на эти объекты, они также будут немедленно освобождены.

Вам не нужно устанавливать array = nil, прежде чем устанавливать его в новый массив.

Ответ 3

Я бы предложил NSMutableArray, потому что не было бы лишних затрат на выделение и освобождение