Цель C: запрос об освобождении свойства экземпляра - PullRequest
1 голос
/ 02 июля 2011

У меня общий запрос относительно управления памятью

//In .h file I defined a property
@interface AClass
{
    someClass *aProperty;
}

@property (nonatomic, retain) someClass *aProperty;

end



//In .m file I synthesized the property and also initialized the property
@implementation AClass

-(void)aMethod
{
    self.aProperty = [[someClass alloc]init];
}

Мой вопрос:

Для 'aProperty', где мне сделать 'выпуск', чтобы предотвратить утечку памяти?Обычно я понимаю свойства экземпляра (используя точечные обозначения), мы делаем релиз в методах dealloc и viewdidunload.Но для этого случая мне нужно снова выпустить aProperty в методе aMethod?

Ответы [ 2 ]

4 голосов
/ 02 июля 2011
  1. Вы должны освободить экземпляр в dealloc
  2. При инициализации вашего свойства происходит утечка памяти.Вы делаете alloc + init, сохраняете внутри свойства, но не освобождаете.Обычно используется что-то вроде self.property = [[[someClass alloc] init] autorelease].
2 голосов
/ 02 июля 2011

Поскольку у вас есть retain в

@property (nonatomic, retain) someClass *aProperty;

, любой экземпляр AClass автоматически retain будет иметь свое свойство aProperty.Поэтому вам нужно будет вызвать [aProperty release] в методе dealloc AClass.

Каждый раз, когда вы вызываете aMethod, вы создаете новый экземпляр someClass без освобождения предыдущего экземпляра.Это приведет к огромной утечке.Вы можете исправить это одним из двух способов.Либо освободите предыдущее значение aProperty, либо добавьте в вызов autorelease.

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