NSNotification VS KVO

Siento que no entiendo completamente la diferencia entre KVO y NSNotification ... Parecen tan similares ... ¿Podría dar algún ejemplo que muestre cuándo es mejor usar un método y cuándo el otro?

No hablo de Bind e IB, pero me refiero a agregar Observer mediante programación en mi código con NSNotificationCenter o KVO

[self.preferenceController addObserver:self 
                                    forKeyPath:@"color" 
                                       options:NSKeyValueObservingOptionOld 
                                       context:@"Color-change"
];

Respuestas a la pregunta(1)

Su respuesta a la pregunta