iOS开发 KVO

一. 名词解释
KVO(key-Value Observing),键值编码。通过对目标对象的属性进行观察,当属性值发生变化时,触发观察者对象实现的KVO接口方法来自动通知观察者。简单的说,就是一个对象可以通过KVC监听另外一个对象的状态变化。KVO是基于KVC实现的
二 .KVO使用

  1. 使用系统提供的KVO方法添加和移除KVO。
    以下是系统提供的观察者的三个方法:
@observer:观察者,也就是KVO通知的订阅者。订阅者必须实现 
observeValueForKeyPath:ofObject:change:context:方法
@keyPath:描述将要观察的属性,相对于被观察者。
@options:KVO的一些属性配置;有四个选项:NSKeyValueObservingOptionNew:change字典包括改变后的值
NSKeyValueObservingOptionOld:change字典包括改变前的值
NSKeyValueObservingOptionInitial:注册后立刻触发KVO通知
NSKeyValueObservingOptionPrior:值改变前是否也要通知(这个key决定了是否在改变前改变后通知两次)
@context: 上下文,这个会传递到订阅者的函数中,用来区分消息,所以应当是不同的。
@change:这个字典保存了变更信息,具体是哪些信息取决于注册时的 NSKeyValueObservingOptions。
- (void)addObserver:(NSObject *)observer forKeyPath:(NSString *)keyPath options:(NSKeyValueObservingOptions)options context:(void *)context;//添加观察者
- (void)removeObserver:(NSObject *)observer forKeyPath:(NSString *)keyPath;//移除观察者(注意:在不用的时候,不要忘记解除注册,否则会导致内存泄露。)
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context;//观察者默认执行的回调
  1. 手动KVO。手动KVO的好处就是可以加上自己的判断条件。
    首先,需要手动实现属性的 setter 方法,并在设置操作的前后分别调用 willChangeValueForKey: 和 didChangeValueForKey方法,这两个方法用于通知系统该 key 的属性值即将和已经变更了;
    其次,要实现类方法 automaticallyNotifiesObserversForKey,并在其中设置对该 key 不自动发送通知(返回 NO 即可)。这里要注意,对其它非手动实现的 key,要转交给 super 来处理。
  2. 禁用KVO
    直接automaticallyNotifiesObserversForKey返回NO,实现属性的 setter 方法,不进行调用willChangeValueForKey: 和 didChangeValueForKey方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值