Управление памятью при назначении нового объекта - PullRequest
1 голос
/ 15 февраля 2011

Предположим, у меня есть переменная экземпляра, в которой я определил как сохраненную в заголовочном файлеЯ назначаю ему объект, когда класс инициализируется.Теперь предположим, что в какой-то функции я назначаю новый объект моей переменной экземпляра.Нужно ли освобождать предыдущий сохраненный объект?

Ответы [ 4 ]

5 голосов
/ 15 февраля 2011

Зависит от того, как вы его назначаете.Если вы назначите его непосредственно переменной-члену, то да, вам нужно будет освободить старую.Если вы назначите его с помощью открытого свойства, например self.propertyname, то старое будет автоматически освобождено.

1 голос
/ 15 февраля 2011

Если вы выделяете новый объект и хотите назначить его объекту, который уже «принадлежит», вы должны освободить этот объект и получить «право собственности» на новый.

0 голосов
/ 15 февраля 2011

Нет, сгенерированный метод сеттера высвободит / автоматически выпустит значение, ранее указанное в ivar для свойства.

Документы Apple по управлению памятью, хотя и длинные, но их стоит прочитать для лучшего понимания.

Документация Apple по управлению памятью

0 голосов
/ 15 февраля 2011

Нет, автоматически созданный установщик удержания будет вызывать сброс при необходимости, если вы используете установщик (напрямую или с точечной нотацией).Сеттер будет выглядеть примерно так:

-(void)setObject:(id)newObject{
    if(newObject != myCurrentObject){
       [myCurrentObject release];
       myCurrentObject = [newObject retain];
    }
}

См. Руководство по программированию управления памятью Apple - Методы доступа к разделу .

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