title: KVO observeValueForKeyPath method called twice
body: <p>I write a demo wanted to trying KVO programming,I found the observeValueForKeyPath
  method always execute twice when i only change value once,what's wrong?please help me,Thanks</p>
  
  <p>code</p>
  
  <p>StatusSyncer.h</p>
  
  <pre><code>#import &lt;Foundation/Foundation.h&gt;
  
   @interface StatusSyncer : NSObject
   @property NSString *title;
   +(instancetype)sharedInstance;
  @end
  </code></pre>
  
  <p>StatusSyncer.m</p>
  
  <pre><code>#import "StatusSyncer.h"
  @implementation StatusSyncer
  + (instancetype)sharedInstance {
     static id _sharedInstance = nil;
     static dispatch_once_t oncePredicate;
     dispatch_once(&amp;oncePredicate, ^{
        _sharedInstance = [[self alloc] init];
     });
     return _sharedInstance;
  }
  @end
  </code></pre>
  
  <p>ViewController.m</p>
  
  <pre><code>- (void)viewDidLoad {
     [super viewDidLoad];
     [self.statusSyncer addObserver:self forKeyPath:@"title"    options:NSKeyValueObservingOptionNew context:nil];
  
   }
  
   -(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context{
      if ([keyPath isEqualToString:@"title"]) {
          NSLog(@"chane");
      }
  }
  
  -(StatusSyncer *)statusSyncer{
      if (_statusSyncer==nil) {
          _statusSyncer = [StatusSyncer sharedInstance];
      }
  
      return _statusSyncer;
  }
  </code></pre>
  
  <p>DetailViewController.m</p>
  
  <pre><code>- (IBAction)changeAction:(id)sender {
      self.statusSyncer.title= @"newTitle叶";
  
  }
  
  -(StatusSyncer *)statusSyncer{
      if (_statusSyncer==nil) {
          _statusSyncer = [StatusSyncer sharedInstance];
      }
  
      return _statusSyncer;
  }
  </code></pre>
  
  <p>output：</p>
  
  <pre><code>2015-06-15 12:58:49.849 KVOAdvence[2433:74541] chane
  2015-06-15 12:58:49.850 KVOAdvence[2433:74541] chane
  </code></pre>