Премахване на обекти от 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