TRBank *bank = [TRBank new];
[bank setValue:@1000.5 forKey:@"accountBalance"];
[bank addObserver:bank forKeyPath:@"accountBalance" options:(NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld | NSKeyValueObservingOptionInitial) context:nil];
[bank setValue:@2000 forKey:@"accountBalance"];
[bank removeObserver:bank forKeyPath:@"accountBalance"];
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSString *,id> *)change context:(void *)context {
if([keyPath isEqualToString:@"accountBalance"]) {
NSLog(@"%@ %@",[change valueForKey:NSKeyValueChangeNewKey],[change valueForKey:NSKeyValueChangeOldKey]);
}