KVO or Key Value Observing is a wonderful feature of Objective C and is implemented in iPhone. This allows any object’s properties be observed for changes from another object. This is amazingly powerful, without any coding on the observed object’s part, a controller may now know when when its value changes. You could set a flag to persist data to a database, update a widget on a UI, etc. All this can be done without having to set a event listener or notifications, etc.
To register an object to listen for an object’s values changing, use addObserver

The object that is doing the observing must implement the observerValueForKeyPath method. This is the method that is called whenever a property changes on the observed object.

That simple. For example, let’s say we want to add an object to a persistence queue on a change. Our PersistenceManager object (assume this exists) might listen to specific objects to change and add them to a queue to write to some storage when they do.
[someObject addObserver:persistenceManager forKeyPath:@"watchedData"
options:0 context:nil];
Now, persistenceManager is listening for any change to “watchedData” of someObject. Next, we need to implement our callback method in persistenceManager.
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { if ([keyPath isEqualToString:@"watchedData"] == YES) { [storeQueue addObject:object]; } }
Unfortunately, all observed data come through the same method “observeValueForKeyPath”, so you’ll have to check values to determine the proper logic flow. There is an interesting discussion on properly handling this situation.