self.car = [[Car alloc]init];
self.car.speed = 10;
[self.car addObserver: car forKeyPath:@"speed" options:NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld context:nil"];
当我这么样调用的时候会使用runtime动态的生成一个NSKVONotifying_Car,是Car的子类,当我们去改变值的时候,如果这个对象添加了监听就会通过isa指针找到NSKVONotifying_Car这个类对象,然后调用setSpeed,如果没有监听就会通过isa指针找到Car这个类对象,然后调用setSpeed.
区别就在这里如果添加了监听setSpeed内部实现是调用了一个_NSSetintValueAndNotify进行修改值,如果没有调用就直接调用[Car setSpeed]进行复值