iOS基础知识8

一、addObserver:forkeyPath:options:context:各个参数的作用分别是什么?observer中需要实现哪个方法才能获得KVO回调?

iOS中通知方面的内容:NSNotificationCenter通知中心、KVO(Key-Value Observing)键值观察 、Delegate代理、Callback回调。

KVO是Key-Value Observing的缩写,是对象间监控对方状态的改变,并做出反应的机制。对象可以为自己的属性注册观察者,当这个属性的值发生了改变,系统会对这些注册的观察者做出通知。

 

1、为对象的属性注册观察者。

 

- (void)addObserver:(NSObject *)observer  
         forKeyPath:(NSString *)keyPath  
            options:(NSKeyValueObservingOptions)options  
            context:(void *)context 

 

observer:观察者对象。其必须实现方法observeValueForKeyPath:ofObject:change:context:。

keyPath:被观察的属性,其不能为nil。

options:设定通知观察者时传递的属性值,是传改变前的还是改变后的,通常设置为NSKeyValueObservingOptionNew。

context:一些其他的需要传递给观察者的上下文信息,通常设置为nil。

比如:

 

Person *myPerson = [[Person alloc] init];
[myPerson addObserver:self forKeyPath:@"age" options:NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld context:nil];


2、观察者接收通知,观察者通过实现下面的方法,完成对属性改变的响应。

 

 

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

keyPath:被观察的属性,其不能为nil。

 

object:被观察者的对象。

change:属性值,根据上面提到的Options设置,给出对应的属性值。

context:注册观察者传递的context对象。
比如:

 

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context  
{  
    if ([keyPath isEqualToString:@"age"]) {  
        NSLog(@"age is changed age = %@", [change valueForKey:NSKeyValueChangeNew
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值