При использовании КВО наблюдатель должен хранить ссылку на то, что он наблюдает. Если он делает это, то объект никогда не может «уйти» (если вы имеете в виду быть освобожденным), потому что у наблюдателя тоже есть ссылка.
Если вы хотите прекратить наблюдать это, сделайте это от наблюдателя.
Если вы просто ждете изменения одного значения, то при получении уведомления - удалите наблюдателя. (Примите меры предосторожности, чтобы не удалить наблюдателя, если он уже удален).
В деллоке вашего наблюдателя вы очистите - удалив все оставшиеся наблюдения на объектах.
Это может быть случай сохранения массива наблюдаемых объектов в наблюдателе, чтобы отслеживать их - я видел, что это использовалось, но мне это не нравится, и оно не очень гибкое.
Что мне нравится, так это класс, который я назвал KVOHelper. Вы создаете это в классе наблюдения и передаете объект, который вы наблюдаете, наблюдатель и ключевой путь. Это обертка вокруг КВО. Вы можете удалить наблюдателя, если хотите - или просто отпустить KVOHelper, и в своей процедуре Deloc это удалит наблюдателя перед тем, как выпустить все. Это гарантирует, что вы не можете удалить одного и того же наблюдателя более одного раза (что вызовет исключение). Он также поставляется в комплекте с KVOHelperSet для управления несколькими KVOHelper. Я не могу взять кредит на написание этого класса - я получил это от парня, с которым я работал над проектом. Но я использую это все время сейчас - и это работает хорошо. Принцип прост, и вы должны быть в состоянии создать свой собственный.