Как освободить элементы NSArray, загруженные arrayWithContentsOfURL? - PullRequest
2 голосов
/ 18 октября 2010

Я слишком туп, чтобы знать ответ на этот вопрос - кто-нибудь знает ответ окончательно?

NSMutableArray *happyDictionaryEntries;
@property (nonatomic, retain) NSMutableArray *happyDictionaryEntries;

-(void) getStuffFromServer
 {
 ..
 self.happyDictionaryEntries = [NSMutableArray
  arrayWithContentsOfURL:[NSURL URLWithString:aUrl]];
 }

Позже мы выпустим массив.Я хочу на самом деле освободить все элементы массива.

Итак, мы бы [happyDictionaryEntries release].

(или я полагаю, просто self.happyDictionaryEntries = nil, поскольку это свойство.)

НО вам также нужно [happyDictionaryEntries removeAllObjects]?

И / ИЛИ вам нужно вручную освобождать каждый элемент в массиве?

(Действительно - связанный вопрос - действительно лиКто-нибудь знает, действительно ли removeAllObjects освобождает каждый объект? Не совсем понятно, какова ситуация.) Есть ли идиома?

Я могу без проблем управлять памятью в типичном массиве, который вы создаете «сами», ноЯ слишком туп, чтобы понять, какова ситуация, когда у вас есть arrayWithContentsOfURL в миксе.Если кто-то окончательно знает ответ, спасибо!

"В документации для NSArray и NSMutableArray указано поведение управления памятью - Джошуа"

Правильно.Есть ли у вас документация для removeAllObjects или для arrayWithContentsOfURL?Может кто-нибудь решительно заявить, что делает removeAllObjects?Спасибо.

"Из руководства по программированию управления памятью от Apple: [общеизвестно, что такое doco]" - jlehr.

Правильно, но что делает removeAllObjects?Кто-нибудь знает?

ПРИМЕЧАНИЕ, ЧТО НЕТ документации по этому вопросу .Документ по NSMutableDisctionary removeAllObjects, например является явным .НО документ на NSMutableArray removeAllObjects заметно НИЧЕГО НЕ СКАЗЫВАЕТ .Это может быть похоже (для примера) на imageNamed, который в принципе не работает и работает не так, как следовало ожидать.

1 Ответ

4 голосов
/ 19 октября 2010

Да, классы NSArray, NSSet и NSDictionary сохраняют все содержащиеся в них объекты.Когда количество сохраненных объектов NSArray, NSSet или NSDictionary достигает нуля, все сохраненные объекты высвобождаются как часть dealloc.removeAllObjects также освободит все удерживаемые объекты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...