KVO

KVO是Objective-c对观察者模式(Obsever Pattern)的实现。也是Cocoa Binding的基础。当被观察者对象的某个属性发生改变时会获得通知。

KVO的内部实现:(面试问题)
KVO的实现依赖于Runtime
当你观察一个对象时,一个新的类会被动态创建。这个类继承自该对象原本的类,并重写了被观察属性的setter方法。自然,重写的setter方法会负责在调用原setter方法之前和之后,通知所有观察对象值的更改。最后把这个对象的isa指针(isa指针告诉Runtime系统这个对象的类是什么)指向这个新创建的子类,对象就神奇的变成了新创建的子类的实例。

为什么要使用KVO?
有的朋友可能会有疑问,KVO能实现的我们使用setter方法同样能实现啊,其实不然。
1.我们创建一两个setter方法感觉没什么,但是如果要观察的属性非常多,那么还能一一重写setter方法来实现吗?想必大家心里已有了答案,但是利用KVO则能很好的解决上述问题。
2.我们自定义的类是很容易改写setter方法的,但是如果你是用一个已经编译好了的类库时要监控其中一个属性时怎么办?难道还要去重写setter方法?如果使用KVO则很轻松解决问题。
3.使用KVO能够方便的记录变化前的值和变化后的值,不适用KVO你还要自己来解决这些问题。
4.KVO让你的代码看起来更加简洁清晰易于维护

KVO使用步骤如下:
1 注册,指定被观察这的属性
2 实现回调方法
3 触发回调方法
4 移除观察
注册观察者:
[a addObserver:b forKeyPath:@”name” options:NSKeyValueObservingOptionNew context:NULL];
对象a为 被观察者;
对象b为: 观察者;
“forKeyPath ” 为 被观察的属性
“options” 为 通知变化的具体值 有4个值 分别是:

NSKeyValueObservingOptionNew 把更改之前的值提供给处理方法
NSKeyValueObservingOptionOld 把更改之后的值提供给处理方法
NSKeyValueObservingOptionInitial 把初始化的值提供给处理方法,一旦注册,立马就会调用一次。通常它会带有新值,而不会带有旧值。
NSKeyValueObservingOptionPrior 分2次调用。在值改变之前和值改变之后。

实现回调方法
-(void)observeValueForKeyPath:(NSString )keyPath ofObject:(id)object change:(NSDictionary

//视图将要消失
-(void)viewWillDisappear:(BOOL)animated {
    //在不需要观察的时候需要把他干掉
    [self removeObserver:self forKeyPath:@"xxxxx"];
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值