Привет всем. Я знаю, что этот вопрос задавался, но у меня до сих пор нет четкой картины управления памятью в Objective-C. Я чувствую, что довольно хорошо понимаю, но я все еще хотел бы получить несколько правильных ответов для следующего кода. У меня есть ряд примеров, которые я хотел бы уточнить у кого-то (ей).
Установка значения для переменной экземпляра :
Скажем, у меня есть NSMutableArray
переменная. В моем классе, когда я инициализирую его, мне нужно вызвать retain
на нем?
Должен ли я сделать
fooArray = [[[NSMutableArray alloc] init] retain];
или
fooArray = [[NSMutableArray alloc] init];
Делает ли [[NSMutableArray alloc] init]
уже установленный счетчик retain
в 1, поэтому мне не нужно вызывать retain
для него? С другой стороны, если бы я вызвал метод, который, как я знаю, возвращает объект autorelease
d, мне наверняка пришлось бы вызвать retain
, верно? Вот так:
fooString = [[NSString stringWithFormat:@"%d items", someInt] retain];
Свойства :
Я спрашиваю о retain
, потому что я немного озадачен тем, как работает автоматический установщик @property
.
Если бы я установил fooArray
как @property
с установленным retain
, Objective-C автоматически создаст следующий установщик, верно?
- (void)setFooArray:(NSMutableArray *)anArray {
[fooArray release];
fooArray = [anArray retain];
}
Итак, если бы у меня был такой код: self.fooArray = [[NSMutableArray alloc] init];
(который я считаю правильным), Objective-C создает метод установки, который вызывает retain
для значения, присвоенного fooArray
. В этом случае значение retain
будет фактически 2?
Правильный способ задания значения свойства :
Я знаю, что есть вопросы по этому и (возможно) дебатам, но как правильно установить @property
?
Это
self.fooArray = [[NSMutableArray alloc] init];
Или это?
NSMutableArray *anArray = [[NSMutableArray alloc] init];
self.fooArray = anArray;
[anArray release];
Я бы хотел получить разъяснения по этим примерам. Спасибо!