KVO 与 KVC 区别

还长时间 没来了  今天分享一下 个人总结的 KCO  KVC 笔记:

(如有错误,请速速联系我  愿听你的建议!)

KVO 与 KVC 区别:

  • KVO 主要用于监听属性属性改变

  • KVC 主要用于对某一对象的成员变量赋值

KVO:   

运用KVO 监听成员属性 时   想要监听哪个 就对哪个属性监听

// KVO
监听属性改变

[item addObserver:self
forKeyPath:@"one" options:0
context:nil];

[item addObserver:self
forKeyPath:@"Two" options:0
context:nil];

[item addObserver:self
forKeyPath:@"Three" options:0
context:nil];

[item addObserver:self
forKeyPath:@"Four" options:0
context:nil];

既然监听了 就必须实现系统的监听方法:
(在这个方法中设置一些属性值)
/**
 *  监听到某个对象的属性改变了,就会调用
 *
 *  @param keyPath 属性名
 *  @param object  哪个对象的属性被改变
 *  @param change  属性发生的改变
 */
 
   -
(void)observeValueForKeyPath:(NSString *)keyPath
ofObject:(id)object
change:(NSDictionary *)change
context:(void *)context

既然对 属性进行监听  那就要在对象销毁时 对其中的属性移除监听
比如:

-
(void)dealloc

{
       
 [self.item removeObserver:self forKeyPath:@"badgeValue"];
 
     
 [self.item removeObserver:self forKeyPath:@"title”];

}

KVC:

我们一般是通过调用set方法或属性的点语法来直接更改对象的状态,即对象的属性值,比如[stu
setAge:10];  stu.age = 9;

KVC,它是一种间接更改对象状态的方式,其实现方法是使用字符串来描述对象需要更改的属性。KVC中的基本调用包括valueForKey:和setValue:ForKey:,以
字符串的形式向对象发送消息

这里以Student和Card为例子

1.使用setValue:ForKey:设置Student对象的name

[student setValue:@"one" forKey:@"name"];

使用setValue:ForKey:设置Student对象的age

[student setValue:[NSNumber numberWithInt:17]
forKey:@"age"];

在设置一个标量值时,需要先将标量值包装成一个NSNumber或NSValue对象

2.KVC可以对对象进行批量更改

例如,同时获取Student的age和name

NSArray *keys = [NSArray arrayWithObjects:@"name", @"age", nil];

NSDictionary *dict = [student dictionaryWithValuesForKeys:keys];

3.  同时设置Student的age和name

NSArray *keys = [NSArray arrayWithObjects:@"name", @"age", nil];

NSArray *values = [NSArray arrayWithObjects:@"One", [NSNumber
numberWithInt:16], nil];

NSDictionary *dict = [NSDictionary dictionaryWithObjects:values
forKeys:keys];

[student setValuesForKeysWithDictionary:dict];

KVO 与 KVC 区别,布布扣,bubuko.com

时间: 2024-12-22 22:45:33

KVO 与 KVC 区别的相关文章

iOS开发——实用篇&KVO与KVC详解

KVO与KVC详解 由于ObjC主要基于Smalltalk进行设计,因此它有很多类似于Ruby.Python的动态特性,例如动态类型.动态加载.动态绑定等.今天我们着重介绍ObjC中的键值编码(KVC).键值监听(KVO)特性: 键值编码KVC 键值监听KVO 键值编码KVC 我们知道在C#中可以通过反射读写一个对象的属性,有时候这种方式特别方便,因为你可以利用字符串的方式去动态控制一个对象.其实由于ObjC的语言特性,你根部不必进行任何操作就可以进行属性的动态读写,这种方式就是Key Valu

04 KVC|KVO|Delegate|NSNotification区别

一. iOS 中KVC.KVO.NSNotification.delegate 在实际的编程中运用的非常多,掌握好他们的运行原理和使用场合对于我们程序的开发将会带来事办工倍的效果:   二. KVC  key-Value coding,键值编码,级通过制定的key我们能查找到对应的value,也能给对应的key附上value值.这一点类似于我们的字典查找.比如我们需要查找哪一页的内容,只需要将字典的唯一的页码(也就是key)找到,就能够知道这一页的内容,根据这个字典这一特性,程序猿们发明了Dic

KVO 和 KVC 的区别?

key value coding   ,key value observer KVC 是 路径访问的规范 KVO 观察某个变量的变化过程    它提供一种机制,当指定的对象的属性被修改后,则对象就会接受到通知.简单的说就是每次指定的被观察的对象的属性被修改后,KVO就会自动通知相应的观察者了 系统框架已经支持KVO,所以程序员在使用的时候非常简单. 1. 注册,指定被观察者的属性, 2. 实现回调方法 3. 移除观察 假设一个场景,股票的价格显示在当前屏幕上,当股票价格更改的时候,实时显示更新其

[精辟]KVO 和 KVC 的区别和用法,干货!!!

一.KVO介绍 KVO就是观察者模式,说白了就是你关心的一个值改变了,你就会得到通知.你就可以在你想处理的地方处理这个值. 二.KVO的使用 一般分为三步: 注册监听 使用方法: /** * 添加KVO监听者 * * @param observer 观察者(监听器) * @param keyPath 属性名(要观察的属性) * @param options * @param context 传递的参数 */ - (void)addObserver:(NSObject *)observer for

KVO、KVC

Key-Value Observing (简写为KVO):当指定的对象的属性被修改了,允许对象接受到通知的机制.每次指定的被观察对象的属性被修改的时候,KVO都会自动的去通知相应的观察者,相当于设计模式中的观察者模式. KVO的优点:当有属性改变,KVO会提供自动的消息通知.这样的架构有很多好处.首先,开发人员不需要自己去实现这样的方案:每次属性改变了就发送消息通知.这是KVO 机制提供的最大的优点.因为这个方案已经被明确定义,获得框架级支持,可以方便地采用.开发人员不需要添加任何代码,不需要设

kvo与kvc

一.概述 KVC 与 KVO 是 Objective C 的关键概念,个人认为必须理解的东西,下面是实例讲解. Key-Value Coding (KVC) KVC,即是指 NSKeyValueCoding,一个非正式的 Protocol,提供一种机制来间接访问对象的属性.KVO 就是基于 KVC 实现的关键技术之一. 一个对象拥有某些属性.比如说,一个 Person 对象有一个 name 和一个 address 属性.以 KVC 说法,Person 对象分别有一个 value 对应他的 nam

KVO与KVC理解

KVC 与 KVO 是 Objective C 的关键概念,个人认为必须理解的东西,下面是实例讲解. Key-Value Coding (KVC) KVC,即是指 NSKeyValueCoding,一个非正式的 Protocol,提供一种机制来间接访问对象的属性.KVO 就是基于 KVC 实现的关键技术之一. 一个对象拥有某些属性.比如说,一个 Person 对象有一个 name 和一个 address 属性.以 KVC 说法,Person 对象分别有一个 value 对应他的 name 和 a

ios基础篇(十八)——Delegate 、NSNotification 和 KVO用法及其区别

一.Delegate Delegate本质是一种程序设计模型,iOS中使用Delegate主要用于两个页面之间的数据传递.iphone中常用@protocol和delegate的机制来实现接口的功能.例如想在A的功能要在B中实现,可以在A中定义一个Protocol. protocol用法: @interface ClassA :ClassB<protocol1, protocol2> 1.首先声明一个UIView类: @interface myView  :UIView{  } @end: 2

IOS 开发之 KVO和KVC 模式的简单使用

- (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. //1.KVC的使用 //  Key Value Coding的缩写, 表示键值编码 //作用:  通过字符串标示的方式访问对象的property和实例变量 //项目中使用:    使用KVC实现JSON中字典到model的转换 Car *car = [[Car al