Если мой экземпляр наблюдает какое-то свойство другого объекта, я должен вызвать removeObserver: forKeyPath: in dealloc?
Да
... если нет более подходящего времени в начале выполнения.
Наблюдатели считаются несохраненными ссылками. Отказ от отмены регистрации может привести к тому, что ваш освобожденный экземпляр будет отправлен в обмен сообщениями.
Вам нужно использовать -removeObserver: forKeyPath: для удаления наблюдателя до того, как - [NSObject dealloc] запустится, так что да, выполнение этого в методе -dealloc вашего класса сработает. см. Эти вопросы. Удаление наблюдателя question2