KVO和KVC简介

一、Key-Value-Observing--KVO(键值观察者模式)
(1)简介:
此机制可以在一个类中监听另外一个类的属性变化,包括我们自己的类和已有的Cocoa类库中的类。当被监听的类的属性发生了变化时,观察者会收到通知,可以针对属性变化添加自己的动作。
(2)为被监听对象注册观察者:指定观察者,要观察的属性的名称,options可以传0值。
– addObserver:forKeyPath:options:context:
(3)观察者实现通知接收函数:
– observeValueForKeyPath:ofObject:change:context:
(4)在不需要观察者或者观察者销毁前移除观察者:
– removeObserver:forKeyPath:context:
(5)当被监听的对象的对应key值发生更改时,观察者会收到通知,比如给属性直接赋值,后者调用-setValue:forKey:方法。

二、KVO的通知触发方式:
(1)在观察者类中实现+ automaticallyNotifiesObserversForKey:方法,当返回YES时,该key会在值发生改变时自动触发通知,如果返回NO,需要手动触发通知,在值改变前后加如下方法:– willChangeValueForKey:    – didChangeValueForKey:
(2)是自动还是手动,根据实际情况定,默认是自动的。
(3)当直接赋值时,要加上对象,如当前对象的属性改变时要加self,否则不触发通知,需要手动触发。

三、KVO 依赖键

有时候一个属性的值依赖于其他属性值,那么如果其他属性值发生变更,那么必然也就导致该属性值的变更,也即 Dependent Poroperties。在KVO中,引入了依赖键

在KVO中,提供了如下两种实现 依赖键 的方法:

[cpp] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. + (NSSet *)keyPathsForValuesAffectingValueForKey:(NSString *)key    
  2.     
  3. + (NSSet *)keyPathsForValuesAffecting<Key>   
例如,information 属性依赖于 target 的 age 和 grade 属性,target 的 age/grade 属性任一发生变化,information 的观察者都会得到通知。

[cpp] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. + (NSSet *)keyPathsForValuesAffectingInformation    
  2. {    
  3.     NSSet * keyPaths = [NSSet setWithObjects:@"target.age", @"target.grade", nil];    
  4.     return keyPaths;    
  5. }    
  6.     
  7. + (NSSet *)keyPathsForValuesAffectingValueForKey:(NSString *)key    
  8. {    
  9.     NSSet * keyPaths = [super keyPathsForValuesAffectingValueForKey:key];    
  10.     NSArray * moreKeyPaths = nil;    
  11.         
  12.     if ([key isEqualToString:@"information"])    
  13.     {    
  14.         moreKeyPaths = [NSArray arrayWithObjects:@"target.age", @"target.grade", nil];    
  15.     }    
  16.         
  17.     if (moreKeyPaths)    
  18.     {    
  19.         keyPaths = [keyPaths setByAddingObjectsFromArray:moreKeyPaths];    
  20.     }    
  21.         
  22.     return keyPaths;    
  23. }   
要实现 keyPathsForValuesAffectingInformation  或 keyPathsForValuesAffectingValueForKey: 方法是告诉系统 information 属性依赖于哪些其他属性,这两个方法都返回一个key-path 的集合。


如果选择实现 keyPathsForValuesAffectingValueForKey,要先获取 super 返回的结果 set,然后判断 key 是不是目标 key,如果是就将依赖属性的 key-path 结合追加到 super 返回的结果 set 中,否则直接返回 super的结果。

注:显然前者实现过程简单。


四、Key-Value-Coding--KVC(键值编码)
(1)该机制会把类的属性作为一个key处理。
(2)取值:[object valueForKey:@"key"];
    设值:[object setValue:@"value" forKey:@"key"];
(3)KVO是基于KVC实现的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/500151.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

iOS中的异步和多线程概况

一、异步(1)当一个异步过程调用发出后&#xff0c;调用者不能立刻得到结果。实际处理这个调用的部件在完成后&#xff0c;通过状态、通知和回调来通知调用者。比如iOS类库中的NSURLConnectioin中使用代理的方式就是异步。(2)iOS类库中的异步调用提供自动的多线程并发&#xff0…

计算机系答辩麻烦,计算机专业的你,答辩时有多卑微?

你用英语都写不出来的东西就别指望用代码写了。又是一年毕业季&#xff0c;计算机专业的同学们&#xff0c;毕业设计都做好了吗&#xff1f;论文都写完了吗&#xff1f;查重过了吗&#xff1f;答辩准备好了吗&#xff1f;答辩&#xff0c;是你毕业前面临的最后一道关卡&#xf…

计算机A级作文,关于被计算机的作文(共一篇)-疾风作文网

【篇一&#xff1a;其物非故&#xff0c;其人亦存】科幻小说中&#xff0c;人工智能高度发达&#xff0c;甚至超过了人类的智力&#xff0c;计算机统治人类。看到这些&#xff0c;我们长舒一口气&#xff0c;或庆幸计算机智能暂时没有超过人类的风险&#xff0c;或是惴惴不安小…

面向对象设计与分析40讲(17)双重检查锁定(double-checked locking)范式

双重检查锁定&#xff08;也称为“双重检查锁定优化”&#xff09;是一种用于减少获取锁的开销的软件设计模式。它通过在获取锁之前测试锁定条件&#xff08;即“锁提示”&#xff09;来实现。只有在锁定条件检查表明需要锁定时才会进行锁定操作。 #include <atomic> #i…

Block总结

一、简介 Block代码块&#xff0c;本质上它和其它变量类似&#xff0c;不同的是代码块传递的是函数体&#xff0c;类似于selector的功能。调用和其它标准函数一样。声明方式有差别。二、代码块定义例&#xff1a;int ( ^ MyBlock)( int ) ^ (int m){ return m * 3; };1 …

计算机PPT03,南京大学计算机网络课件03.ppt

第3讲数据链路层 3 1数据链路层的基本概念 一 链路与数据链路 链路 link 就是一条无源的点到点的物理线路段 中间没有任何其他的交换结点 数据链路 datalink 则是另一个概念 这是因为当需要在一条线路上传送数据时 除了必须有一条物理线路外 还必须有一些必要通信协议来控制这些…

NSThread使用总结

一、创建NSThread&#xff1a;(1)使用NSThread类方法&#xff1a;detachNewThreadSelector:toTarget:withObject:该方法3个参数分别指定了线程执行的方法&#xff0c;目标&#xff0c;和传递的对象。但是要注意&#xff0c;使用这个方法时&#xff0c;并没有返回任何对象供操作…

甘肃计算机教室中标,大单纷至沓来 甘肃百亿工程浪潮电脑中标8000台

近日&#xff0c;浪潮电脑教育市场再传佳讯&#xff0c;在甘肃百亿工程项目中&#xff0c;凭借出众的产品性价比和针对细分市场的定制化解决方案&#xff0c;浪潮电脑一举拿下了8000台的采购大单&#xff0c;这是继宁夏中标之后浪潮电脑在百亿工程中的又一成功典范&#xff0c;…

NSOperationQueue简介

一、NSOperationQueue简介1.概述&#xff1a;NSOperationQueue类管理NSOperation对象的执行。NSOperationQueue可以被称为操作队列&#xff0c;NSOperation可以被称为操作。操作被添加到操作队列之后&#xff0c;操作队列会根据操作对象的优先级或者相互之间的依赖关系来执行操…

计算机 窗口打开的方法,如何打开命令行窗口?两种实用的方法介绍

Windows系统中常常会用到命令行窗口&#xff0c;那么我们该如何打开命令行窗口?接下来&#xff0c;小编为大家介绍两种实用的打开命令行窗口的技巧&#xff0c;再也不必担忧如何打开命令行窗口的烦恼了。第一种打开方法1.点击自己的电脑中的开始菜单&#xff0c;在菜单中找到运…

GCD简介一:基本概念和Dispatch Queue

一、什么是GCD&#xff1f;Grand Central Dispatch或者GCD&#xff0c;是一套低层API&#xff0c;提供了一种新的方法来进行并发程序编写。从基本功能上讲&#xff0c;GCD有点像NSOperationQueue&#xff0c;他们都允许程序将任务切分为多个单一任务然后提交至工作队列来并发地…

大学生计算机二级大集报名最好,在校大学生如何报名计算机二级?

2009-12-05 回答首先要根据你的所学专业来衡量自己考哪项计算级二级有c语言&#xff0c; vb&#xff0c; vf&#xff0c; java&#xff0c; access&#xff0c; c 六项可选考其中一个你会的 考下来能拿计算机二级了考试分两部分&#xff0c;上机和笔试。笔试就是一些基本的操作…

GCD简介二:多核心的性能

一、概念为了在单一进程中充分发挥多核的优势&#xff0c;我们有必要使用多线程技术。在低层&#xff0c;GCD全局dispatch queue仅仅是工作线程池的抽象。这些队列中的Block一旦可用&#xff0c;就会被dispatch到工作线程中。提交至用户队列的Block最终也会通过全局队列进入相同…

怪哉翻译软件测试,[东方朔传翻译]东方朔传·怪哉原文与翻译

东方朔传怪哉原文与翻译原文&#xff1a;《太平广记》卷四七三引《东方朔传》汉武帝幸⑦甘泉&#xff0c;驰道中有虫&#xff0c;赤色&#xff0c;头牙齿耳鼻尽具&#xff0c;观者莫识①。帝乃使东方朔视之&#xff0c;还对②曰&#xff1a;“此虫名怪哉。昔时拘系⑧无辜&#…

GCD简介三:Dispatch Sources

一、何为Dispatch Sources简单来说&#xff0c;dispatch source是一个监视某些类型事件的对象。当这些事件发生时&#xff0c;它自动将一个block放入一个dispatch queue的执行例程中。我们到底讨论哪些事件类型&#xff1f;下面是GCD 10.6.0版本支持的事件&#xff1a;Mach por…

GCD简介四:挂起,目标指定,信号量

一、Dispatch Queue挂起dispatch queue可以被挂起和恢复。使用 dispatch_suspend函数来挂起&#xff0c;使用 dispatch_resume 函数来恢复。这两个函数的行为是如你所愿的。另外&#xff0c;这两个还是也可以用于dispatch source。一个要注意的地方是&#xff0c;dispatch que…

如何自己做网站发布到服务器上面,怎么做网站 四步教你搭建自己的网站

1、购买域名如果想要做一个自己的网站&#xff0c;购买一个自己喜欢的域名就是首先要做的&#xff01;当你购买好自己的域名&#xff0c;就走出了搭建自己网站的第一步&#xff01;2、购买空间/主机/服务器空间/主机/服务器&#xff0c;看着好像很复杂&#xff0c;其实很简单&a…

GCD简介五:补充

1.GCD在iOS4.0及以上可用。2.GCD中&#xff0c;主线程队列是串行的&#xff1b;全局队列是并行的&#xff0c;并由整个进程共享&#xff1b;用户自建队列&#xff0c;在iOS4.3以下&#xff0c;只能是串行&#xff0c;iOS4.3及以上&#xff0c;可以是并行的。3.dispatch_suspend…

ajax delete 传递参数,springMVC使用PUT、DELETE方法传递参数解决方案

在web.xml中新增过滤器HiddenHttpMethodFilterorg.springframework.web.filter.HiddenHttpMethodFilterHiddenHttpMethodFilter/*需要注意的是&#xff0c;只有context-type&#xff1a;application/x-www-form-urlencoded的请求才会被过滤。该过滤器的核心方法如下&#xff1a…

ARC简介

1、简介&#xff1a;ARC(Automatic Reference Counting)&#xff0c;自动引用计数&#xff0c;需要XCode4.2和SDK5.0的支持。它是一个在编译期间工作的技术&#xff0c;编译器在编译的时候会根据变量的作用域为objective-c变量添加合适的retain、release、autorelease等函数。原…