Вам необходимо удалить себя как делегата, если ваша продолжительность жизни короче объекта, для которого вы делегированы. Почти во всех случаях ваша продолжительность жизни равна или больше, чем объект, для которого вы делегированы. Тем не менее, это хорошая привычка. Рассмотрим случай, когда вы являетесь делегатом для UITableView. В -init
, возможно, вы звоните:
self.myTableView.delegate = self;
Тогда было бы мудро в -dealloc
сказать
_myTableView.delegate = nil;
[_myTableView release];
_myTableView = nil;
Причина для этого заключается в том, что myTableView может сохраняться другими объектами, поэтому может не освобождаться при его освобождении. Если после вашего отсутствия будет выполнен вызов делегата, ваше приложение будет аварийно завершено. Так что очистка указателя делегата - хорошая идея здесь.
Аналогично для NSNotificationCenter вы должны удалить себя в -dealloc
, таким образом:
[[NSNotificationCenter defaultCenter] removeObserver:self];
Это удаляет вас от всех наблюдений. Вы должны сделать это в -dealloc, если ваш класс когда-либо регистрируется для каких-либо уведомлений. Если вы этого не сделаете, и после того, как вы уйдете, появится уведомление, за которым вы наблюдали, приложение упадет.
Это не обязательно для NSTimers, потому что NSTimers сохраняют свою цель (вас).