Разница между выпуском и деаллоком в target-c - PullRequest
39 голосов
/ 18 февраля 2009

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

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

  [super dealloc];
}

Мой вопрос: когда следует использовать release, а когда dealloc?

Спасибо

Ответы [ 3 ]

54 голосов
/ 18 февраля 2009

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

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

2 голосов
/ 20 февраля 2009

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

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

1 голос
/ 25 августа 2011

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

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