Это оставленный объект или авто-релиз? - PullRequest
1 голос
/ 15 сентября 2011

Я объявил MutableArray rqst_entries в заголовке моего класса как свойство и тоже его синтезировал. В viewdidload я добавил следующий код:

self.rqst_entries = [NSMutableArray array];

Превратит ли этот ivar в автоматический выпуск и, возможно, выпустит его раньше (до вызова dealloc)

Спасибо за помощь,

1010 * Stephane *

Ответы [ 4 ]

5 голосов
/ 15 сентября 2011

Если вы определили свою собственность как retain или copy, она будет удерживаться иваром, и с вами все будет в порядке. С другой стороны, если вы определили свое свойство как assigned, у вас возникнут проблемы, поскольку [NSMutableArray array] автоматически освобожден.

3 голосов
/ 15 сентября 2011

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

3 голосов
/ 15 сентября 2011

Нет, если ваша собственность retain или copy.

1 голос
/ 15 сентября 2011

[NSMutableArray array] возвращает автоматически выпущенный объект.

Все ответы о собственности rqst_entries. По сути, вам нужно свойство с моделью памяти retain. Есть случаи, когда вы хотите использовать copy, но обычно это для неизменяемых типов (NSArray, NSString и т. Д.). NSMutableArray является изменяемым (вы можете добавлять записи, удалять записи и изменять записи в массиве).

Вы хотите определить свою собственность как:

@property (nonatomic, retain) NSMutableArray *rqst_entries;

Часть, которая действительно вводит людей в заблуждение, выполняет выделение / копирование / сохранение в назначении свойства, например:

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

потому что это будет течь, если не последует выпуск

[self.rqst_entries release];

Лучший способ назначить в этом случае - использовать локальную переменную (по крайней мере, если вам нужна безопасность потоков). как:

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

Я понимаю, что это ОЧЕНЬ тривиальный пример, но он иллюстрирует суть.

...