KVO简述

1、KVO的实现机制:
以下是苹果官方文档对KVO实现机制的解释:Automatic key-value observing is implemented using a technique called isa-swizzling… When an observer is registered for an attribute of an object the isa pointer of the observed object is modified, pointing to an intermediate class rather than at the true class
文档中唯一有用的信息也就是:被观察对象的 isa 指针会指向一个中间类,而不是原来真正的类。看来,Apple 并不希望过多暴露 KVO 的实现细节。不过,我们可以自己用 runtime 提供的方法去深入挖掘。

简单概括一下KVO的实现机制:
当你观察一个对象时,一个新的类会动态被创建。这个类继承自该对象的原本的类,并重写了被观察属性的 setter 方法。自然,重写的 setter 方法会负责在调用原 setter 方法之前和之后(在重写的set方法中调用- willChangeValueForKey:和- didChangeValueForKey:通知观察者),通知所有观察对象值的更改。最后把这个对象的 isa 指针 ( isa 指针告诉 Runtime 系统这个对象的类是什么 ) 指向这个新创建的子类,对象就神奇的变成了新创建的子类的实例。


2、KVO的使用步骤:
**注册需要观察的对象的属性addObserver:forKeyPath:options:context:
实现observeValueForKeyPath:ofObject:change:context:方法,这个方法当观察的属性变化时会自动调用
取消注册观察removeObserver:forKeyPath:context:**

实例分析:
被观察的类:Student
Student类只有一个属性String name
这里写图片描述

 监听类:Teacher
 只有一个属性:Student类的实例对象stu 
 在构造函数中初始化该属性,并为该属性的name属性增加监听

这里写图片描述
在析构函数中移除该监听
这里写图片描述

 在测试类中进行测试观察:

这里写图片描述

 测试结果:

这里写图片描述

 结果分析:每次在被观察值变化时都会自动调用方法observeValueForKeyPath,可以在这个方法中观察该被观察值的变化前的量和变化后的量。

参考文档:http://my.oschina.net/are1OfBlog/blog/387330

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值