Да, [super dealloc]
всегда должен быть последним, как сказано выше, потому что ссылка на self
или любые другие внутренние компоненты, которые обычно считаются само собой разумеющимися, не будет работать и может привести к сбою, как также сказано выше.
Anдополнительная причина, не упомянутая выше, заключается в том, что ивары находятся в порции памяти, на которую указывает self
, поэтому, если бы вам пришлось что-то делать (например, освободить) эти ивары после [super dealloc]
, вы также разыменовывали бы освобожденную память.
Я сказал «может произойти сбой» выше, потому что, если вы делаете это неправильно, это имеет тенденцию фактически не падать, что имеет смысл, учитывая, что память не перезаписывается, пока не будет использована повторно.Это делает все это еще хуже, потому что у вас потенциально может быть ошибка, которая возникает только иногда, что делает ее более трудной для поиска в случае, если она действительно взорвется вам в лицо.
Кроме этого, вы в порядкеесли вы отпускаете локальную переменную или еще много чего после [super dealloc]
, и вы можете, если вы действительно хотите, сделать что-то вроде
id local = ivar;
[super dealloc];
[local release];
безопасно, но в интересах согласованности этого не делать.
В итоге, да, [super dealloc]
должен быть последним в -dealloc.