Ответ 1
Это АБСОЛЮТНО.
Что вы делаете, зависит от того, используете ли вы автоматический счетчик ссылок (ARC) или ручной подсчет ссылок.
Использование ручного отпускания-сохранения
Manual Release-Retain (MRR) - это управление памятью по умолчанию для всех версий Mac OS X и единственный способ обработки памяти до Xcode 4.2.
В MRR [super dealloc]
должен быть в конце вашего метода.
Итак, ваш код должен выглядеть так:
- (void)dealloc
{
[member release];
[super dealloc];
}
Супер dealloc фактически освобождает память. Подумай об этом. Если после этого вы получите доступ к переменной экземпляра, например:
[super dealloc];
[member release];
... это означает, что переменная экземпляра потенциально недействительна. Между вызовом на super dealloc и вызовом для выпуска члена, теоретически байты, в которых хранится указатель на член, могли быть изменены на что-то еще!
Как Apple объясняет это в Руководство по программированию памяти:
Роль метода dealloc заключается в том, чтобы освободить собственную память объекта и избавиться от любых ресурсов, которые она хранит, включая право собственности на любые переменные экземпляра объекта.
Вы делаете это, распоряжаясь любыми ресурсами, которые ваш объект держится, и вызывая [super dealloc]
. Который располагает любыми объектами, которые он держит, и называет его супер. И так далее, и так далее, до тех пор, пока корневой объект не пометит память, используемую самим экземпляром, как свободную. К моменту возврата [super dealloc]
ваш экземпляр будет освобожден. (Конечно, указатели в нем, вероятно, действительны, но на эту деталь реализации вы не должны полагаться.)
Как правило, при построении (или загрузке) супер супер выполняет работу в первую очередь. Когда вы срываете вещи, сначала делайте свою работу.
См. также:
- dealloc, ссылка класса NSObject, библиотека разработчиков Mac OS X
- Отмена назначения объекта, владение и удаление объектов, руководство по управлению памятью, библиотека разработчиков Mac OS X
С автоматическим подсчетом ссылок
Автоматический подсчет ссылок (ARC) - это новый способ управления памятью, представленный в Xcode 4.2. С ARC компилятор добавляет код управления памятью при компиляции вашего приложения. У вас есть некоторые морщины, о которых вы хотите прочитать больше, прежде чем использовать их (в основном, с ограниченной совместимостью со старыми версиями ОС).
С ARC вы не вызываете (и не можете) [super dealloc]
вообще. Вместо этого [super dealloc]
вызывается, когда заканчивается dealloc
.
См. также:
- LLVM Автоматический подсчет ссылок dealloc