KVC/KVO

--------------------KVC--键值编码-------------------
作用:
通过字符串来描述对象的属性间接修改对象的属性

Student *stu=[[Student alloc]init];//实例化Student 对象
Student 成员变量:name ,age, book
Book 成员变量 price

1 修改price属性

[stu setValue @“10.3”forKey:@“age”]

1.0获取属性值
[stu valueForkey:@"age"];

2 批量修改属性

[stu setValuesWithDictionary:@ {@"age":@"22",@"name":@"傻强"}];
2.0获取批量值(返回值字典)
NSArray *array= [stu dictionaryWithValues:@[@"age",@"name"]];

3 修改属性对象的属性
stu.book=[[BOOK alloc]init];

[stu.book setValue:@10.7 ForKey:@"price"];
[stu setValue:@"10.7" ForKeyPath:@"book.price"];

4 直接获取数组中所有对象的name属性值(name为对象的属性)

Student *stu1=[[Student alloc]init];
Student *stu2=[[Student alloc]init];
Student *stu3=[[Student alloc]init];
NSArray *array=@[stu1,stu2,stu3];

NSArray *nameArray=[array valueForKeyPath:@"name"];

5 直接获取数组中所有对象的price属性值的和(price为对象的属性对象book的属性)

stu1.book=[[BOOK alloc]init];
stu1.book.price=15;

stu2.book=[[BOOK alloc]init];
stu2.book.price=20;

stu3.book=[[BOOK alloc]init];
stu3.book.price=25;
NSArray *sumPrice=@[stu1,stu2,stu3];

id sum=[sumPrice valueForKeyPath:book.@sum.price];

--------------------KVO--键值监听-------------------

作用:
监听对象的属性的变化

下面以用Student对象来监听BOOK对象的price属性值的变化为例
------------------BOOK.m------------------------
BOOK *book=[[BOOK alloc]init];
book.price=10;//price原来的值

Student *stu=[[Student alloc]init];
//添加监听器
[book addObserver:stu forKeyPath:@"price" options:NSKeyValueObserverOptionNew |NSKeyValueObserverOptionOld context:nil];
//book:添加监听器者,stu:被添加监听器者,price:监听对象的什么属性,options:监听类型 context:上下文,这里暂时不需要,可填写为空;

book.price=50;//price变化后的值

//移出监听器
[book removeObserver:stu forKeyPath :@"price"]

------------------Student.m------------------

//当所监听的属性发生改变的时候,会调用这个方法

- (void)observerValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{

//keyPath:被监听的属性,这里为name。
//object:哪个对象的属性,这里为book。
//change :属性值变化为什么(字典),这里为old=10,new=50.
//context:上下文为nil。

}

关于KVC、KVO的更多相关文章

  1. KVC/KVO原理详解及编程指南

    一.简介 1.KVC简介 2.KVO简介 二.KVC相关技术 1.Key和Key Path 2.点语法和KVC 3.一对多关系(To-Many)中的集合访问器方法 4.键值验证(Key-Value V ...

  2. 【转】 KVC/KVO原理详解及编程指南

    原文地址:http://blog.csdn.net/wzzvictory/article/details/9674431 前言: 1.本文基本不讲KVC/KVO的用法,只结合网上的资料说说对这种技术的 ...

  3. kvc/kvo复习

    kvc/kvo复习 1 小问题 '[<XMGPerson 0x7fb8a8f30220> setValue:forUndefinedKey:]: this XMGPerson * pers ...

  4. 转:KVC/KVO原理详解及编程指南

      作者:wangzz 原文地址:http://blog.csdn.net/wzzvictory/article/details/9674431 转载请注明出处 如果觉得文章对你有所帮助,请通过留言或 ...

  5. 阶段性总结⓵触摸事件&手势识别⓶Quartz2D绘图⓷CALayer图层⓸CAAnimation⓹UIDynamic UI动力学⓺KVC&KVO

    知识点复习   1. 触摸事件&手势识别   1> 4个触摸事件,针对视图的 2> 6个手势识别(除了用代码添加,也可以用Storyboard添加)   附加在某一个特定视图上的, ...

  6. IOS开发之KVC KVO KVB

    KVC(Key Value Coding) KVO(Key Value Observing) KVB(Key Value Binding) KVO是Cocoa的一个重要机制,他提供了观察某一属性变化的 ...

  7. KVC & KVO

    KVC和KVO看上去又是两个挺牛的单词简写,KVC是Key-Value Coding的简写,是键值编码的意思.KVO是Key-Value  Observing的简写,是键值观察的意思.那么我们能拿KV ...

  8. KVC&&&KVO

    KVC 什么是KVC --->What KVC指的就是NSKeyValueCoding非正式协议. KVC是一种间接地访问对象的属性的机制. 这种间接表现在通过字符串来标识属性,而不是通过调用存 ...

  9. 04 KVC|KVO|Delegate|NSNotification区别

    一. iOS 中KVC.KVO.NSNotification.delegate 在实际的编程中运用的非常多,掌握好他们的运行原理和使用场合对于我们程序的开发将会带来事办工倍的效果:   二. KVC ...

  10. 深入理解 KVC\KVO 实现机制 — KVC

    KVC和KVO都属于键值编程而且底层实现机制都是isa-swizzing,所以本来想放在一起讲的.但是篇幅有限所以就分成了两篇博文 KVO实现机制传送门 KVC概述 KVC是Key Value Cod ...

随机推荐

  1. C# 读写App.config

    Jul142013 [C#] 读写App.config配置文件的方法 作者:xieyc   发布:2013-07-14 17:29   字符数:3433   分类:编程   阅读: 39,139 次 ...

  2. 扩展RBAC用户角色权限设计方案

    RBAC(Role-Based Access Control,基于角色的访问控制),就是用户通过角色与权限进行关联.简单地说,一个用户拥有若干角色,每一个角色拥有若干权限.这样,就构造成“用户-角色- ...

  3. 用jQuery编的一个分页小代码

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  4. 如何根据屏幕大小改变class的css样式

    /*当屏幕小于1200px*/ @media (max-width:1200px) { ...} 此处针对所有小于1200px屏幕的css属性. /*当屏幕小于1200px且大于992px*/ @me ...

  5. Two Strings Are Anagrams

    Write a method anagram(s,t) to decide if two strings are anagrams or not. 判断两个字符串里的字符是否相同,也就是是否能够通过改 ...

  6. 本科小白学ROS 和 SLAM(一):杂谈

    本人最近才迷恋上ROS(Robot Operating System),准确的说应该是6月中旬,具体的记不清了(可能是年纪大了,容易健忘).对于一个电子DIY的狂热爱好者来说,我在校的梦想就是做一个属 ...

  7. maven项目部分知识

    1.maven项目在pom.xml中用add dependencies加入jar包,搜索不到jar包的解决方案: Window  --> Show View --> Other输入mave ...

  8. 如何用Wireshark捕获USB数据?

    现在越来越多的电子设备采用USB接口进行通讯,通讯标准也在逐步提高.那么,我们就会好奇这些设备是如何工作的?而无论你是一个硬件黑客,业余爱好者或者只是对它有一点兴趣的,USB对我们都是具有挑战性的. ...

  9. 51Nod 1380 夹克老爷的逢三抽一

    Description 一开始有一个环,可以选择删除一个元素获得他的权值,同时删除与它相邻的两个元素,其他元素重新形成环,问能获得的最大价值. Sol 堆+贪心. 一开始从堆中加入所有元素,然后取出一 ...

  10. Kendo UI

    http://www.cnblogs.com/libingql/category/585455.html http://www.scala-china.net/discuz/forum.php?mod ...