Я думаю, здесь есть проблема дизайна. Наблюдаемый объект не должен заботиться о его наблюдателях. Вы говорите, что хотите удалить наблюдателей из метода наблюдаемых объектов dealloc. Но почему это освобождается? Если это все еще наблюдается, где-то есть собственность, таким образом, объект не будет освобожден. Хороший дизайн приводит к тому, что к моменту вызова dealloc не осталось ни одного наблюдателя.
Представьте себе вид, который регистрируется как наблюдатель за модельным объектом. Этот объект модели либо сохраняется в виде, либо в контроллере. Модельный объект не будет называть его деаллок, если он где-то хранится. Только когда последний владелец освобожден, он должен вызвать dealloc. Так, скажем, все права собственности освобождены, кроме view / viewcontroller и остался один наблюдатель (view). Теперь, прежде чем view / viewcontroller освободит свое владение объектом модели, он также должен удалить представление в качестве наблюдателя. Таким образом, к тому времени, когда вызывается метод dealloc, наблюдателя не должно быть.