Подтвердить что ты не робот

NSNotificationCenter: зачем беспокоиться о вызове removeObserver?

Боги парашютировали многие привычки в мою изолированную деревню джунглей, например:

- (void) dealloc {

  [[NSNotificationCenter defaultCenter] removeObserver:self];
  [super dealloc];

}

Их пути странны для меня, но я все еще пытаюсь их понять.

Зачем беспокоиться о том, чтобы очистить рывков, если экземпляр уходит? Не будет ли декремент отсчета/удержания для этого экземпляра? Будет ли это помешать какую-то табличку уведомлений Hash Table, которая содержит список всех слушателей?

4b9b3361

Ответ 1

NSNotificationCenter не сохраняет наблюдателей. Если вы не удаляете наблюдателя, а наблюдатель освобождается, то NSNotificationCenter остается удерживать висячий указатель, который будет (чаще всего) сбой, когда он затем попытается уведомить наблюдателя.

Ответ 2

Хотя на практике многие из ваших непосвященных юношей уйдут без соблюдения обрядов, потому что он радовал Сент-Джобс воздавать заклинание removeObserver на многих ваших суперклассах. Например, UINavigationController. Хотя это не найдено ни в одном из писем, я нашел, что это правда.