Массивы как свойства - сохранить и т. Д. - PullRequest
2 голосов
/ 16 июня 2011

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

@property (nonatomic,retain) NSMutableArray *myArray;

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

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

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

self.myArray = [NSMutableArray array];

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

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

1 Ответ

4 голосов
/ 16 июня 2011

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

В этом случае вы сохраняете:

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

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

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

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

или

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

Это нормально

self.myArray = [NSMutableArray array];

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

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

...