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

В ARC нам нужно отправить removeObserver: явно?

Нужно ли явно отправлять removeObserver: для объектов, которые были добавлены в качестве наблюдателей в NSNotificationCenter раньше?

Я немного смущен и не могу найти точный ответ для этого.

Пожалуйста, предоставьте мне подробно об этом, в том числе о том, почему мы должны явно удалить Observer, и почему компилятор не помещает его неявно в класс/приложение?

4b9b3361

Ответ 1

Да, вам нужно позвонить removeObserver:, если вы не видите, что наблюдаемый класс мог вызвать все освобожденные экземпляры наблюдателя.

Ответ 2

От 10.11 наблюдателям не требуется отказывать в регистрации по методу их освобождения.

NSNotificationCenter и NSDistributedNotificationCenter больше не работают отправлять уведомления зарегистрированным наблюдателям, которые могут быть освобождены. Если наблюдатель может быть сохранен как ссылка с низким уровнем обнуления базовое хранилище хранит наблюдателя как слабую ссылку для обнуления. В качестве альтернативы, если объект не может быть сохранен слабо (поскольку он имеет пользовательский механизм сохранения/выпуска, который предотвратит выполнение способность запоминать объект слабо) объект хранится как неслабая ссылка обнуления. Это означает, что наблюдатели не требуются для отмены регистрации в методе их освобождения. [1]

Ответ 3

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

Ответ 4

Вам всегда нужно удалять наблюдателей для KVO, а также для уведомлений.