KVO & KVC

KVO(键值观察者)

什么是KVO,KVO的实现机制是什么?

  • KVO就是键值观察者,是观察者设计模式的实现
  • 使用isa混写(isa-swizzling)来实现KVO
  • 当前类观察A类的某一个属性时,系统在运行时将A类的isa指针指向了一个新的系统生成的类NSKVONotifying_A类,并在该类中重写setter方法(此句就是isa-swizzling混写技术在KVO中是如何实现的答案),系统新创建的NSKVONotifying_A类是原来A类的子类

setValue: forKey:方法 和 setObject:forKey: 方法的区别

  • KVO通过何种方式能生效?
  • 为什么KVO通过KVC的方法能生效?
  • 通过setter方法能够触发KVO;
    通过KVC setValue:forKey:方法能够触发KVO
    通过成员变量直接赋值不能触发KVO,但可以手动添加KVO的俩个方法才会生效
  • 因为KVC是通过调用了重写的setter方法,所以KVC能触发KVO

手动KVO是怎么样的?

  • 就是在使用成员变量进行赋值,在赋值前后分别添加俩个方法,即 willChangeValueForKey: didChangeValueForKey:(会触发kvo回调)

KVC(键值编码)

-(id)valueForKey:(NSString*)key
-(void)setValue:(id)value ForKey:(NSString*)key

  • 如果知道某一类的私有成员变量的名称,就可以通过KVC进行值修改,因此违背了面向对象思想的

-(id)valueForKey:(NSString*)key 实现流程

KVO & KVC_第1张图片
未命名文件-2.png

-(void)setValue:(id)value ForKey:(NSString*)key 实现流程

KVO & KVC_第2张图片
未命名文件-2.png

你可能感兴趣的:(KVO & KVC)