KVC 和 KVO

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:方法通知监听器属性值发生改变
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 目录:1.KVC用法;2.KVC和对象的setter、getter方法的区别;3.key和keyPath的区别;4...
    伦伦子_f7b3阅读 588评论 0 1
  • 什么是KVC和KVO?两者之间有何关系 KVC : 键值编码,是Key Value Coding 的简称,coco...
    兰章海晏阅读 3,606评论 0 3
  • 在iOS开发中,我们常常用到键值编码KVC和键值监听KVO两个东东,今天小编和大家分享的就是这两个东东在应用开发中...
    突然自我阅读 1,011评论 2 3
  • 在编程中,最常见的就是程序的流程取决于你所使用的各种变量和属性的值,根据变量和属性的值确定后面运行的代码,有时会检...
    pro648阅读 1,655评论 2 27
  • KVC:Key Value Coding,键值编码,是一种间接访问实例变量的方法。 KVC 提供了一个使用字符串(...
    iOS小吴阅读 2,895评论 0 5