iOS9.3でobserveValueForKeyPathが2度呼ばれる話

昨日公開されたiOS9.3の話。まずはコードを。

- (void)buttonTapped:(id)sender {
    NSLog(@"buttonTapped");
    
    NSUserDefaults * defaults = [NSUserDefaults standardUserDefaults];
    [defaults setObject:@"1" forKey:@"hogehogehoge"];
    [defaults synchronize];
}

- (void)viewDidLoad {
    [super viewDidLoad];   
    // Do any additional setup after loading the view, typically from a nib.
    UIButton *btn1 = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    [btn1 addTarget:self action:@selector(buttonTapped:) forControlEvents:UIControlEventTouchUpInside];
    [btn1 setFrame:CGRectMake(0, 20, 100, 44)];
    [btn1 setTitle:@"test" forState:UIControlStateNormal];
    [self.view addSubview:btn1];
    
    NSUserDefaults * defaults = [NSUserDefaults standardUserDefaults];
    [defaults addObserver:self forKeyPath:@"hogehogehoge" options:0 context:nil];    
}

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{    
    if ([keyPath isEqualToString:@"hogehogehoge"]) {
        NSLog(@"observeValueForKeyPath object = %@ change = %@ context = %@", object, change, context);
    }
}

で実行結果
iOS9.2

016-03-23 17:54:44.916 ios93Test[11457:4534369] buttonTapped
2016-03-23 17:54:44.920 ios93Test[11457:4534369] observeValueForKeyPath object = <NSUserDefaults: 0x13ed06d90> change = {
    kind = 1;
} context = (null)
2016-03-23 17:55:00.574 ios93Test[11457:4534369] buttonTapped
2016-03-23 17:55:00.575 ios93Test[11457:4534369] observeValueForKeyPath object = <NSUserDefaults: 0x13ed06d90> change = {
    kind = 1;
} context = (null)

iOS9.3

2016-03-23 18:07:19.694 ios93Test[1467:322189] buttonTapped
2016-03-23 18:07:19.697 ios93Test[1467:322189] observeValueForKeyPath object = <NSUserDefaults: 0x13d608c20> change = {
    kind = 1;
} context = (null)
2016-03-23 18:07:19.698 ios93Test[1467:322189] observeValueForKeyPath object = <NSUserDefaults: 0x13d608c20> change = {
    kind = 1;
} context = (null)
2016-03-23 18:07:23.509 ios93Test[1467:322189] buttonTapped
2016-03-23 18:07:23.509 ios93Test[1467:322189] observeValueForKeyPath object = <NSUserDefaults: 0x13d608c20> change = {
    kind = 1;
} context = (null)
2016-03-23 18:07:23.509 ios93Test[1467:322189] observeValueForKeyPath object = <NSUserDefaults: 0x13d608c20> change = {
    kind = 1;
} context = (null)

なーぜか、2回呼ばれる。
UnityのPlayerPrefsから来る時も2回。

さてググっても全くヒットしないのですが、僕だけでしょうか・・