Удалить объекты из NSArray

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

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

Что NSMutableArray я сделаю :

[array removeAllObjects];

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

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

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


person Fry    schedule 29.10.2012    source источник
comment
«Но с NSArray я не могу этого сделать!» так почему бы вам не использовать NSMutableArray, если это то, что вам нужно?   -  person jv42    schedule 29.10.2012
comment
Поскольку массив неизменяем (без добавления или удаления объекта). Меняйте только весь массив!   -  person Fry    schedule 13.11.2012


Ответы (3)


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

array = newArray;

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

person Andreas Ley    schedule 29.10.2012

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

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

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

person rob mayoff    schedule 29.10.2012

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

person Techie Manoj    schedule 29.10.2012