При раздаче ссылки я видел, например, что использовались release и dealloc
-(void)dealloc
{
[foo release];
[nar dealloc];
[super dealloc];
}
У меня вопрос: когда использовать release, а когда dealloc?
Спасибо
При раздаче ссылки я видел, например, что использовались release и dealloc
-(void)dealloc
{
[foo release];
[nar dealloc];
[super dealloc];
}
У меня вопрос: когда использовать release, а когда dealloc?
Спасибо
Никогда не вызывайте dealloc, кроме как [super dealloc] в конце dealloc метода вашего класса. Метод release отказывается от владения объектом. Когда у объекта Какао больше нет владельцев, он может быть освобожден - в этом случае ему автоматически будет отправлено сообщение dealloc.
Если вы собираетесь программировать Какао, вам необходимо прочитать Рекомендации по управлению памятью. Это невероятно просто, как только вы преодолеете начальную неровность, и если вы не поймете, что в этом документе, у вас будет много тонких ошибок.
Оператор dealloc в вашем примере вызывается, когда счетчик удержания объекта становится равным нулю (через объект, отправляющий ему сообщение о выпуске).
Поскольку он больше не нужен, он очищается, отправляя release сообщение объектам, за которые он держится.
Вы никогда не должны вызывать dealloc явно (если только это не [super dealloc] в методе dealloc, но это единственное исключение). Objective-C обрабатывает управление памятью с помощью подсчета ссылок, поэтому вы просто должны сопоставить свои выделения / сохранения с выпусками / автоматическими выпусками и позволить объекту деконструировать себя.
[self dealloc]внутри определения-dealloc, это приведет к рекурсии. Вы уверены, что код правильный? - person codelogic   schedule 18.02.2009