Очень старый вопрос, но подумал о добавлении некоторых пунктов.Я согласен с ответом Тома Даллинга , однако в больших приложениях существует множество сценариев, в которых мы склонны добавлять наблюдателя для свойства объекта, и мы не можем или не можем удалить их из списка наблюдателей.
Давайте рассмотрим следующий сценарий из моего приложения - ViewController отображает объект-змею, который я наблюдаю за изменением свойства этого объекта - «ядом».Поэтому, когда viewController нужно было показать другую змею, я просто удаляю контроллер представления из наблюдателя этого объекта змеи.
Приложение развивалось, чтобы показывать список змей вместо одной змеи, это означает, что мне приходилось наблюдатьдля свойства всех змей в этом объекте.Теперь, когда старая змея удалена из массива, я должен узнать об этом событии, чтобы я мог удалить контроллер представления в качестве наблюдателя от этого объекта змеи.Чтобы сделать это, я должен сначала наблюдать за изменениями в самом массиве.Чтобы сделать это, я должен следовать определенному протоколу, чтобы вставить объекты в массив и удалить их из массива.Таким образом, сложность основывается на.Мы все знаем о последствиях не удаления наблюдателя из объекта, и если этот объект выпущен ОС!
Выше приведен только один пример, главная проблема здесь - Я не могу получить списокнаблюдателей KVO для данного объекта, чтобы удалить их из наблюдателей до того, как этот объект будет освобожден - Это может быть легко достигнуто с помощью NSNotification и NSNotificationCenter.Иногда я склонен склоняться к использованию NSNotification поверх KVO, однако KVO всегда имеет преимущество перед уведомлением с точки зрения хорошей практики проектирования.