KVC 和 KVO

作者 冲破茧缚 2015.08.28 16:12*
写了3967字,被8人关注,获得了14个喜欢

KVC 和 KVO

字数363 阅读32 评论0 

KVC

  • (Key Value Coding),键值编码,通过键值(字符串)来访问属性的机制,来间接修改属性值
  • 使用方法
    • 赋值 setValue:forKey:
      • 例如:[person setValue:@"Jack" forKey:@"name"];,执行这个方法时会优先调用setName:方法,如果没有这个方法,则会直接修改name或者_name这个成员变量
    • 取值 valueForKey:
      • 例如:id name = [person valueForKey:@"name"];,执行这个方法时会优先调用name方法,如果没有这个方法,则会直接读取name或者_name这个成员变量

KVO

  • (Key Value Observing),监听模型属性值的改变
 //cc监听了aa的name属性的改变
[aa addObserver:cc forKeyPath:@"name" options: NSKeyValueObservingOptionOld context:nil];

// cc得实现监听方法 /** * 当监听到object的keyPath属性发生了改变 */ - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { NSLog(@"监听到%@对象的%@属性发生了改变, %@", object, keyPath, change); } //退出时移除监听的属性 - (void)dealloc { [self.p1 removeObserver:self forKeyPath:@"name"]; }
  • KVO是基于Runtime机制实现的
  • 当对象执行完addObserver:forKeyPath: options:context:后,系统会在运行期动态创建一个新的子类,并将对象的isa指针指向该类,该类会重写set方法,set方法里面先实现super的set方法,再调用监听器的observeValueForKeyPath: ofObject: change: context:方法通知监听器属性值发生改变
 

转载于:https://www.cnblogs.com/baiwulong/p/5489593.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值