У меня есть ситуация в моем коде, где я не могу очистить объекты классов без первого вызова [super dealloc]
. Это примерно так:Можно ли написать код после [super dealloc]?
// Baseclass.m
@implmentation Baseclass
...
-(void) dealloc
{
[self _removeAllData];
[aVariableThatBelongsToMe release];
[anotherVariableThatBelongsToMe release];
[super dealloc];
}
...
@end
Это прекрасно работает. Моя проблема в том, что когда я пошел в подкласс этого огромного и неприятного класса (более 2000 строк грубого кода), у меня возникла проблема: когда я выпустил свои объекты перед вызовом [super dealloc]
, у меня были зомби, которые запускали код, который был активирован, когда я звонил метод [self _removeAllData]
.
// Subclass.m
@implementation Subclass
...
-(void) dealloc
{
[super dealloc];
[someObjectUsedInTheRemoveAllDataMethod release];
}
...
@end
Это отлично работает, и он не требует от меня реорганизации какого-либо кода. Мой вопрос: Это безопасно для меня, чтобы это сделать, или мне нужно реорганизовать мой код? Или, может быть, автореферат объектов?
Я программирую для iPhone, если это имеет значение.
Ответил здесь http://stackoverflow.com/questions/909856/why-do-i-have-to-call-super-dealloc-last-and-not-first – Mantar
Вы не зовем 'dealloc 'ты сам? Это то, что вы должны ** никогда не делать. – Rits
нет ... дело в том, что на ссылку 'someObjectUsedInTheRemoveAllDataMethod' ссылается (очень длинным обходным путем, как я уже сказал, проект на самом деле груб на данный момент) привыкает после того, как я освободил его. У меня есть много круглых ссылок, и они вступают в игру ... Моя единственная цель на этом этапе - сделать рабочий код без утечек памяти. –