Подтвердить что ты не робот

Разница между выпуском и dealloc в objective-c

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

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

  [super dealloc];
}

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

Спасибо

4b9b3361

Ответ 1

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

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

Ответ 2

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

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

Ответ 3

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