Документация по "dealloc" - PullRequest
       4

Документация по "dealloc"

0 голосов
/ 30 января 2012

В реализации dealloc не следует вызывать реализацию суперкласса.Вы переопределяете этот метод для удаления ресурсов, отличных от переменных экземпляра объекта, например:

  • (void) dealloc {free (myBigBlockOfMemory);}

Выше сказано, что мы не должны вызывать реализацию суперкласса.Но ниже написано, что мы должны «включить суперклассовые версии dealloc через сообщение super».Так что, кажется, между этими двумя пунктами есть некоторый конфликт.Это должно быть из-за чего-то, что я пропустил.Надеюсь, что кто-то может объяснить это ...

Если вы используете ручной подсчет ссылок, подклассы должны реализовать свои собственные версии dealloc, чтобы разрешить освобождение любой дополнительной памяти, используемой объектом, например динамически выделяемойхранилище данных или переменных экземпляра объекта, принадлежащих освобожденному объекту.После выполнения специфического для класса освобождения метод подкласса должен включать версии dealloc суперкласса через сообщение super:

  • (void) dealloc {[companion release];бесплатно (myBigBlockOfMemory);[супер сделка];}

http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/nsobject_Class/Reference/Reference.html

1 Ответ

6 голосов
/ 30 января 2012

Ваша первая цитата предназначена для случаев, когда включен автоматический подсчет ссылок (ARC), а вторая - для случаев, когда ARC не включен ARC - это новая функция, предоставляемая в SDK 5.0, которая устраняет большую часть ручного управления памятью, которое требовалось программисту.

См. Переход к примечаниям к выпуску ARC , в частности эти заявления:

Вы можете реализовать метод dealloc, если вам нужно управлять ресурсами кроме выпуска переменных экземпляра. Вы не должны (действительно вы не можете) освободить переменные экземпляра ...

Пользовательские методы dealloc в ARC не требуют вызова [super dealloc] (это фактически приводит к ошибке компилятора). Цепочка к супер автоматизировано и применяется компилятором.

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