В ARC нужно ли отправлять removeObserver: явно?
Должны ли мы посылать removeObserver:
явно для объектов, которые были добавлены в качестве наблюдателей к NSNotificationCenter
ранее?
Пожалуйста, подробно расскажите мне об этом, в том числе о том, почему нам нужно явно удалить сервер, и почему компилятор не помещает его неявно в класс/приложение?
4 ответа:
Да, вам нужно вызвать
removeObserver:
, если вы этого не сделаете, наблюдаемый класс может вызвать все освобожденные экземпляры наблюдателя.
Начиная с 10.11 наблюдатели не обязаны отменять регистрацию в своем методе освобождения.
NSNotificationCenter и NSDistributedNotificationCenter больше нет отправлять уведомления зарегистрированным наблюдателям, которые могут быть освобождены. Если наблюдатель может быть сохранен как слабая ссылка на нуль. базовое хранилище хранит наблюдателя как обнуляющую слабую ссылку. Альтернативно, если объект не может быть сохранен слабо (потому что он имеет пользовательский механизм удержания / освобождения, который бы не допустить выполнения будучи в состоянии хранить объект слабо) объект хранится как неслабая ссылка на обнуление. Это означает, что наблюдатели не требуются чтобы отменить регистрацию в их методе освобождения.[1]