美文网首页
KVC与KVO的理解

KVC与KVO的理解

作者: 陌巷先森 | 来源:发表于2019-02-28 10:06 被阅读0次

一、KVC

KVC即是指NSKeyValueCoding,一个非正式的Protocol,提供一种机制来间接访问对象的属性,而不是通过调用setter、getter方法访问。其实现方法有两种:

  • 使用字符串来描述对象需要更改的属性
//通过键值对来为对象属性赋值,主要为私有属性赋值
Student *stu = [Student new];
 [stu setValue:@"KVC" forKey:@"name"];
//通过键值对取得对象属性的值
NSString *name = [stu valueForKey:@"name"];
  • 使用键值对路径来描述对象需要修改的属性,keyPath就是用.号把一个个的key链接起来,根据路径进行访问
//如果对象A的属性是对象B,要为对象B的属性赋值可以通过键值对路径
_student = [Student new];
[self setValue:@"KVCPath" forKeyPath:@"student.name"];
//通过键值对路径获取对象B属性的值
NSString *pathName = [self valueForKeyPath:@"student.name"];
  • 可以将字典转模型
//可以通过字典进行赋值,将字典转换成模型
NSDictionary *dic = @{
                          @"name":@"luna",
                          @"city":@"Beijing",
                          };
Person *p = [Person new];
[p setValuesForKeysWithDictionary:dic];

二、KVO

1.KVO介绍
KVO(Key-Value Observing)建立在KVC之上,通过对某个对象的某个属性添加观察者,当该属性改变,就会调用- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context方法,从而进行一些操作。
2.KVO原理
KVO通过创建一个当前类的派生类,重写该对象的setter方法,并且在setter方法中实现通知机制。通过修改当前类的isa指针,让其指向派生类。当调用setter方法时就会调用派生类的setter方法,从而激活键值通知机制。此外派生类还重写了delloc方法来释放资源。
3.KVO使用

/*
1.注册观察者
第一个参数是观察者对象,第二个参数是观察的键值路径,第三个参数是当值更新时返回的选项,第四个参数是文本内容
*/
[_student addObserver:self forKeyPath:@"name" options:NSKeyValueObservingOptionNew context:nil];

/*
2.实现回调方法
*/
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSKeyValueChangeKey,id> *)change context:(void *)context{
    NSLog(@"KVO---keyPath:%@,object:%@,change:%@",keyPath,object,change);
}

/*
3.在不需要时移除观察者
*/
[_student removeObserver:self forKeyPath:@"name"];

参考:完整项目资料下载

相关文章

  • delegate和notification区别,分别在什么情况下

    KVC(Key-Value-Coding)KVO(Key-Value-Observing)理解KVC与KVO(键-...

  • KVO与KVC简单理解

    KVO与KVC简单理解 ///////////////////////////////////////我是该死的分...

  • IOS KVC与KVO理解

    目录 1 什么是KVO KVC 2 KVC与KVO能实现什么? 什么是KVO与KVC? 首先我们看下官方文档解释是...

  • KVC/KVO理解

    KVC 与 KVO 是 Objective C 的关键概念,是必须要理解的东西 下面是实例讲解。 一、KVC – ...

  • KVC 与 KVO 理解

    原路径:https://magicalboy.com/kvc_and_kvo/KVC 与 KVO 是 Object...

  • KVC 与 KVO 理解

    KVC 与 KVO 是 Objective C 的关键概念,个人认为必须理解的东西,下面是实例讲解。 其他相关文章...

  • KVC 与 KVO 理解

    KVC 与 KVO 是 Objective C 的关键概念,个人认为必须理解的东西,下面是实例讲解。 Key-Va...

  • KVC 与 KVO 理解

    KVC(Key-Value Coding)即是指NSKeyValueCoding,一个非正式的 Protocol,...

  • KVC 与 KVO 理解

    KVC,即是指[NSKeyValueCoding] 一个非正式的 Protocol,提供一种机制来间接访问对...

  • KVC 与 KVO 理解

    KVC 与 KVO 是 Objective C 的关键概念,个人认为必须理解的东西,下面是实例讲解。 其他相关文章...

网友评论

      本文标题:KVC与KVO的理解

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