一.KVC

Key-Value-Coding 键值编码(KVC:是一种存取值的方式,通过key存value 或者通过key获取value

key从哪里来的呢?

key 把对象里面的属性名、变量名当作了一个key(把属性名看成了一个普通的字符串来使用)

以字符串的形式向对象发送消息,字符串是存取值的关键字;

例子:

在person类中声明了一个name属性,并初始化一个对象sushi。

存值:,,,,,,,setValue:,,,,,,,forKey:,,,,,,,,

[sushi setValue :@"苏轼"forKey:@"shshi"];

取值:,,,,,,,valueForKey:,,,,,,,

NSString *str = [sushi valueForKey :@"sushi"];

路径存取值,用“ . ”来表示 它是一个键路径(不是属性的那种哦!!)

//通过路径查找人家里狗身上的跳蚤,在Person类里声明一个狗的类型dog,在狗的类里声明一个跳蚤类型的tiao。在跳蚤类里声明一个name的属性。初始化狗gg,跳蚤tt。

首先要他们联系起来,相互知道:

[sushi setValue:gg forKey:@"dog"];

[gg setValue:tt forKey:@"tiao"];

存值:setValue:,,,,,,,,forKeyPath:,,,,,,,,

[sushi setValue:@"跳蚤"forKeyPath:@"dog.tiao.name"] ;

取值:valueForKeyPath:,,,,,,,,

NSString *name = [sushi valueForKeyPath:@"dog.tiao.name"];

二.KVO

Key-Value-Observer 键值观察者

通过Key来观察Value的变化 去做出响应

KVO主要用于视图交互方面,比如界面的某些数据变化了,界面的显示也跟着需要变化,那就需要建立数据和界面的关联。

KVO是一对一的传值

通过key来检测值是否发生改变 如果发生改变 就会调用KVO的响应方法

Key-Value-Observer 键值观察者

是一对一传值

通过key来检测值是否发生改变 如果发生改变 就会调用kvo的响应方法。

如果使用完观察者 就需要移除观察者,防止再次使用通知 接收不到消息

例子:让一个人观察一个狗的表情变化。

首先在狗中定义一个属性 face;

在观察者 中定义一个方法 通过key来检测值是否发生改变

-(void)watch:(Dog *)dog{

_dog = dog;//这里是为了后面移除观察者

[_dog addObserver:self forKeyPath: @“face”   options:NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld context:nil ];

{

当检测的值发生改变的时候,自动调用下面这个方法:

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

{

//然后判断开始做出你想要的反应

if(keyPath isEqualToString :@"face")

{

NSLog(@"狗的表情由%@变成了%@",change[@"old"],change[@"new"]);

[self eat]//做出自己想要的反应

}

}

-(void)eat{

NSLog(@"丢一块肉");

}

//移除观察者

-(void)dealloc{

[_dog   removeObserver:self forKeyPath:@"face"];

在主文件中

Dog *moyangquan = [Dog new];

moyangquan.face = @“smile";

Person *liBai = [Person new];

[liBai watchDog:moyangquan];

//狗的发生改变

moyangquan.face = @“wangwang";

结果:

OC-设计模式KVC+KVO定义及使用的更多相关文章

  1. OC之KVC,KVO

    KVO简介 在 Cocoa 的模型-视图-控制器 (Model-view-controller)架构里,控制器负责让视图和模型同步.这一共有两步:当 model 对象改变的时候,视图应该随之改变以反映 ...

  2. IOS开发之KVC KVO KVB

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

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

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

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

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

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

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

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

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

  7. kvc/kvo复习

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

  8. 设计模式之观察者模式(关于OC中的KVO\KVC\NSNotification)

    学习了这么久的设计模式方面的知识,最大的感触就是,设计模式不能脱离语言特性.近段时间所看的两本书籍,<大话设计模式>里面的代码是C#写的,有一些设计模式实现起来也是采用了C#的语言特性(C ...

  9. QF——OC中的KVC,KVO

    KVC: (Key Value Coding) 键值编码 所谓KVC,其实就是不通过set和get方法访问对象属性,而是通过属性名字符串动态的去读取属性.KVC其实也是OC反射机制的一种运用. 之所以 ...

随机推荐

  1. RegexKitLite 正则表达式

    http://blog.csdn.net/zzfsuiye/article/details/6631466(转--讲得不错) 最 近做一个项目遇到从NSString中获取当中的IP地址使用 Regex ...

  2. I.MX6 mfgtool2-android-mx6q-sabresd-emmc.vbs hacking

    /******************************************************************** * I.MX6 mfgtool2-android-mx6q- ...

  3. vim-airline的theme

    仓库位置: https://github.com/vim-airline/vim-airline-themes 这些内置的这些主题,可以直接使用,方法是在.vimrc中写 let g:airline_ ...

  4. 《JS高程》数据类型学习笔记

    认认真真看完了<JavaScript高级程序设计>第3章的基本概念,原来一直不明白的知识点都在这里面啊...T_T...基础真的很重要,很重要,很重要... 现在终于明白了读书的技巧,书读 ...

  5. div+css总结—FF下div不设置高度背景颜色或外边框不能正常显示的解决方法(借鉴)

    原地址:http://blog.sina.com.cn/s/blog_60b35e830100qwr2.html 在使用div+css进行网页布局时,如果外部div有背景颜色或者边框,而不设置其高度, ...

  6. python数据结构与算法——小猫钓鱼(使用队列)

    按照<啊哈>里的思路实现这道题目,但是和结果不一样,我自己用一幅牌试了一下,发现是我的结果像一点,可能我理解的有偏差. # 小猫钓鱼 # 计算桌上每种牌的数量 # 使用defaultdic ...

  7. Spring MVC 通过@Value注解读取.properties配置内容

    第一步:在applicationContext.xml配置: <bean id="configProperties" class="org.springframew ...

  8. ListView优化相关

    链接1 http://www.jb51.net/article/35273.htm 链接2 http://www.cnblogs.com/xilinch/archive/2012/11/08/2760 ...

  9. 转:【Spring MVC Controller单例陷阱】

    http://lavasoft.blog.51cto.com/62575/1394669/ Spring MVC Controller默认是单例的: 单例的原因有二:1.为了性能.2.不需要多例. 1 ...

  10. c#部分---又见循环。。

    小时候背的诗,现在竟然这样玩. 又是循环,可见其无处不在的特性.就像“春眠不觉晓,处处蚊子咬.”