Разница между высвобождением и освобождением в объекте-c

При раздаче ссылки я видел, например, что использовались release и dealloc

-(void)dealloc
{
  [foo release];
  [nar dealloc];

  [super dealloc];
}

У меня вопрос: когда использовать release, а когда dealloc?

Спасибо


person hhafez    schedule 18.02.2009    source источник
comment
Если вы вызовете [self dealloc] внутри определения -dealloc, это приведет к рекурсии. Вы уверены, что код правильный?   -  person codelogic    schedule 18.02.2009


Ответы (3)


Никогда не вызывайте dealloc, кроме как [super dealloc] в конце dealloc метода вашего класса. Метод release отказывается от владения объектом. Когда у объекта Какао больше нет владельцев, он может быть освобожден - в этом случае ему автоматически будет отправлено сообщение dealloc.

Если вы собираетесь программировать Какао, вам необходимо прочитать Рекомендации по управлению памятью. Это невероятно просто, как только вы преодолеете начальную неровность, и если вы не поймете, что в этом документе, у вас будет много тонких ошибок.

person Chuck    schedule 18.02.2009
comment
как насчет [self dealloc], как я показал в примере, действительно ли это нужно? - person hhafez; 18.02.2009
comment
Мало того, что это не нужно, вызов [self dealloc] в вашем методе dealloc создает бесконечный цикл. - person Chuck; 18.02.2009

Оператор dealloc в вашем примере вызывается, когда счетчик удержания объекта становится равным нулю (через объект, отправляющий ему сообщение о выпуске).

Поскольку он больше не нужен, он очищается, отправляя release сообщение объектам, за которые он держится.

person Abizern    schedule 20.02.2009

Вы никогда не должны вызывать dealloc явно (если только это не [super dealloc] в методе dealloc, но это единственное исключение). Objective-C обрабатывает управление памятью с помощью подсчета ссылок, поэтому вы просто должны сопоставить свои выделения / сохранения с выпусками / автоматическими выпусками и позволить объекту деконструировать себя.

person Vadoff    schedule 25.08.2011