runtime在KVO的低层实现

#1. 实例化一个类

Person *person = [[Person alloc] init];

person.age =11;

#2. 开始监听

[person addObserver:selfforKeyPath:@"age"options:NSKeyValueObservingOptionNewcontext:nil];

#3. 值改变时(age = 111),监听执行的方法

-(void)observeValueForKeyPath:(NSString*)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void*)context{

NSLog(@"person 的值变了:%d",_person.age);

}



核心步骤:

1,生成一个Person类的派生类Person_KVO

2,使用当前对象的isa指向新的派生类,就会调用派生类的set方法

3.重写Person_KVO的setAge方法,在set方法中拿到观察者(使用运行时关联观察者这个属性)

4,每次重写setAge方法,都调用观察者的ml_observeValueForKeyPath方法。实现时刻监听。


runtime在KVO的低层实现_第1张图片

你可能感兴趣的:(runtime在KVO的低层实现)