rewrite NSNotificationCenter with key-value observer