美文网首页
你真的了解KVO和KVC吗

你真的了解KVO和KVC吗

作者: 木子尚武 | 来源:发表于2016-06-07 14:32 被阅读85次

      KVO和KVC的表面意思很简单,KVO是键值观察者,用来进行事件的监听;KVC则是键值编码,通过对象的Key来来改变对象的属性。但是往底层走一下,这两个方法还是有很多值得研究的地方。
      首先我们来研究一下KVO,先创建一个拥有age属性的Person类:

 Person *person = [[Person alloc]init];
 self.person = person;
 person.age = 20;
 
 [person addObserver:self forKeyPath:@"age" options:NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld context:@"KVO是键值观察者"];
 person.age = 30;

      在上面的代码中,我们设置了person所在的控制器来监听age这个属性。

   // 监听属性变化的系统方法
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSString *,id> *)change context:(void *)context{
  
   NSLog(@"%@----%@------%@",context,keyPath,change);
}

      当属性person的age属性发生改变时,系统会自动调用上面的方法,其中keyPath代表监听的属性,object代表所监听的对象,change代表所监听属性改变前后的值,context代表传递的信息(id类型)

  // 当控制器销毁时,移除观察者
  - (void)dealloc{
      [self.person removeObserver:self forKeyPath:@"age"];
     }

      当然最后不要忘了移除监听者,否则系统会报错。
      然后我们再来看一下KVC,它会通过属性名来强制改变属性的值,而不用考虑此属性是私有的还是公有的。比如我们同样创建一个Person类,并且这个类有一个私有的属性age,那么我们可以利用以下的操作,访问属性值并修改

  Person *person = [[Person alloc]init];
  [person setValue:@20 forKey:@"age"];
  NSLog(@"%@",[person valueForKey:@"age"]);

相关文章

  • 你真的了解KVO和KVC吗

    KVO和KVC的表面意思很简单,KVO是键值观察者,用来进行事件的监听;KVC则是键值编码,通过对象的Key来来...

  • KVC、KVO的本质

    这篇文章介绍KVC、KVO的本质。如果你对KVC、KVO不了解,推荐先查看其用法:KVC和KVO学习笔记[http...

  • KVC、KVO

    KVC、KVO探识(一)KVO和KVO的详细使用 KVC、KVO探识(二)KVC你不知道的东西 KVC、KVO探识...

  • KVC内部原理?KVC和KVO关系?

    KVC都不陌生,多多少少都用过,那么KVC内部原理是怎样的?KVC和KVO什么关系?使用KVC赋值会触发KVO吗?...

  • KVC,KVO

    KVC , KVO KVC和KVO的区别及应用 KVC/KVO原理 1. KVC键值编码 KVC,即是指NSKey...

  • ios基础——KVO、KVC

    KVO和KVC常见问题: 1.KVC和KVO是什么.2.KVC和KVO的原理是什么3.KVC和KVO的使用场景4....

  • 可能碰到的iOS笔试面试题(7)--KVO-KVC

    KVC-KVO KVC的底层实现? KVO的底层实现? 什么是KVO和KVC? KVO的缺陷? KVO是一个对象能...

  • KVC 和 KVO

    iOS-KVC和KVO精炼讲解(干货)KVC 和 KVOiOS开发系列--Objective-C之KVC、KVO细...

  • 什么是KVC

    在iOS开发过程中,我们经常会听到或者用到KVO/KVC,但是对于什么是KVO和KVC,我们可能没有那么了解。下面...

  • KVO/KVC系列

    在iOS开发过程中,我们经常会听到或者用到KVO/KVC,但是对于什么是KVO和KVC,我们可能没有那么了解。下面...

网友评论

      本文标题:你真的了解KVO和KVC吗

      本文链接:https://www.haomeiwen.com/subject/povddttx.html