Массивы как свойства - сохранить и т. Д.

Я начинаю разбираться в вопросах управления памятью, но меня немного озадачивает использование свойств с массивами. Если я объявлю свойство в интерфейсе так -

@property (nonatomic,retain) NSMutableArray *myArray;

затем синтезируйте его в реализации, нужно ли мне выделять его при создании массива? Вот так -

self.myArray = [[NSMutableArray alloc] init];

или это приводит к дополнительному счету удержания? Должен ли я просто сделать -

self.myArray = [NSMutableArray array];

и позволить сеттеру сделать удержание?

Большое спасибо всем, кто может прояснить это для меня!


person SomaMan    schedule 16.06.2011    source источник


Ответы (1)


В обоих случаях вы позволяете установщику сохранять ваш экземпляр.

В этом случае вы переусердствуете:

self.myArray = [[NSMutableArray alloc] init];

Установщик делает, и сообщение о распределении отправляется.

Это можно исправить с помощью:

self.myArray = [[[NSMutableArray alloc] init] autorelease];

or

NSMutableArray *newInstance = [[NSMutableArray alloc] init];
self.myArray = newInstance;
[newInstance release];

Это хорошо

self.myArray = [NSMutableArray array];

однако не каждый класс имеет метод удобного класса для возврата автоматически выпущенного экземпляра.

Взгляните на Руководство по программированию управления памятью / Владение и удаление объектов, это даст вам хорошее представление о том, когда увеличивается счетчик сохранения и когда следует освободить.

person Nick Weaver    schedule 16.06.2011
comment
Спасибо! По какой-то причине я забыл об автоматическом выпуске, хотя раньше делал это, когда копировал код прямо из примеров. С положительной стороны, я думаю, что должен получить более общее представление о том, что происходит, чтобы на самом деле понять, что проблема была! Я перечитаю руководство, это может что-то значить для меня сейчас ... - person SomaMan; 16.06.2011
comment
@Franklyn Weber, пожалуйста. Не полагайтесь на свойство keepCount объектов, если вы хотите отлаживать свой код. Ссылка на руководство больше всего говорит о том, когда выпускать: только если вы заявили о праве собственности на экземпляр. - person Nick Weaver; 16.06.2011