NSNotificationCenter: зачем беспокоиться о вызове removeObserver?
Боги парашютировали многие привычки в мою изолированную деревню джунглей, например:
- (void) dealloc {
[[NSNotificationCenter defaultCenter] removeObserver:self];
[super dealloc];
}
Их пути странны для меня, но я все еще пытаюсь их понять.
Зачем беспокоиться о том, чтобы очистить рывков, если экземпляр уходит? Не будет ли декремент отсчета/удержания для этого экземпляра? Будет ли это помешать какую-то табличку уведомлений Hash Table, которая содержит список всех слушателей?
Ответы
Ответ 1
NSNotificationCenter
не сохраняет наблюдателей. Если вы не удаляете наблюдателя, а наблюдатель освобождается, то NSNotificationCenter
остается удерживать висячий указатель, который будет (чаще всего) сбой, когда он затем попытается уведомить наблюдателя.
Ответ 2
Хотя на практике многие из ваших непосвященных юношей уйдут без соблюдения обрядов, потому что он радовал Сент-Джобс воздавать заклинание removeObserver
на многих ваших суперклассах. Например, UINavigationController
. Хотя это не найдено ни в одном из писем, я нашел, что это правда.