KVO 和 KVC 的区别?

KVO 和 KVC 的区别?

 

key value coding   ,key value observer 

KVC 是 路径访问的规范   

 

KVO 观察某个变量的变化过程    它提供一种机制,当指定的对象的属性被修改后,则对象就会接受到通知。简单的说就是每次指定的被观察的对象的属性被修改后,KVO就会自动通知相应的观察者了

 

系统框架已经支持KVO,所以程序员在使用的时候非常简单。

     1. 注册,指定被观察者的属性,

     2. 实现回调方法

     3. 移除观察

 

假设一个场景,股票的价格显示在当前屏幕上,当股票价格更改的时候,实时显示更新其价格。

 

 

 

kvc:键 – 值编码是一种间接访问对象的属性使用字符串来标识属性,而不是通过调用存取方法,直接或通过实例变量访问的机制。
  很多情况下可以简化程序代码。apple文档其实给了一个很好的例子。
  kvo:键值观察机制,他提供了观察某一属性变化的方法,极大的简化了代码。
  具体用看到嗯哼用到过的一个地方是对于按钮点击变化状态的的监控。
  比如我自定义的一个button
  [self addObserver:self forKeyPath:@"highlighted" options:0 context:nil];
  #pragma mark KVO
  - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
  {
  if ([keyPath isEqualToString:@"highlighted"] ) {
  [self setNeedsDisplay];
  }
  }
  对于系统是根据keypath去取的到相应的值发生改变,理论上来说是和kvc机制的道理是一样的。
  对于kvc机制如何通过key寻找到value:
  “当通过KVC调用对象时,比如:[self valueForKey:@”someKey”]时,程序会自动试图通过几种不同的方式解析这个调用。首先查找对象是否带有 someKey 这个方法,如果没找到,会继续查找对象是否带有someKey这个实例变量(iVar),如果还没有找到,程序会继续试图调用 -(id) valueForUndefinedKey:这个方法。如果这个方法还是没有被实现的话,程序会抛出一个NSUndefinedKeyException异常错误。
  (cocoachina.com注:Key-Value Coding查找方法的时候,不仅仅会查找someKey这个方法,还会查找getsomeKey这个方法,前面加一个get,或者_someKey以及_getsomeKey这几种形式。同时,查找实例变量的时候也会不仅仅查找someKey这个变量,也会查找_someKey这个变量是否存在。)
  设计valueForUndefinedKey:方法的主要目的是当你使用-(id)valueForKey方法从对象中请求值时,对象能够在错误发生前,有最后的机会响应这个请求。这样做有很多好处,下面的两个例子说明了这样做的好处。“
  来至cocoa,这个说法应该挺有道理。
  因为我们知道button却是存在一个highlighted实例变量.因此为何上面我们只是add一个相关的keypath就行了,
  可以按照kvc查找的逻辑理解,就说的过去了

转载于:https://www.cnblogs.com/PengFei-N/p/4703200.html

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

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

相关文章

react全家桶指的是哪些?

react全家桶: react(整体架构)  redux || mobx(状态管理)  react-router(路由)  axios(ajax请求)  antd || react-material || antd-model(UI框架库)

将Redis集成到您的Spring项目中

本文展示了如何通过注释配置将Redis缓存集成到您的spring项目中。 我们将从Gradle配置开始。 我们将使用jedis驱动程序。 group com.gkatzioura.spring version 1.0-SNAPSHOTapply plugin: java apply plugin: eclipse apply plugin: idea apply plugin: spring-bootbuildscr…

自学前端的误区和痛点解决办法

网上有很多自学的方案路线,还有一些知道;但是我感觉他们很多人都是没有真实学习过的,很多人说的那些路线,真的是扯淡;肯定不是自己通过自学后的感悟,他们所谓的路线可能是结合培训班大纲和知乎的一些答案组…

指纹识别工具(CMSeek)

你喜欢上别人挺好的啊,不然我总觉得我们还有可能。。。 ---- 网易云热评 介绍:一款扫描CMS相关信息的软件,该软件可进行170多个CMS的基本检测,可检测Drupal版本信息,可扫描多个站点 下载地址(软件作者&…

kafka监控工具kafkaOffsetMoniter的使用

简介 KafkaOffsetMonitor是由Kafka开源社区提供的一款Web管理界面,用来实时监控Kafka的Consumer以及Partition中的Offset,可以在web界面直观的看到每个Partition的Message的增长速度,是否消费,是否阻塞等。 使用 如果不想编译&…

前端开发攻城狮必须知道的开发环境和插件

前端开发,做到后面,是可以走很多方向的;但是要保证后期的平滑过度,前期还是要把一些必须的知识搞扎实的;下面是我根据自己学习的感悟,写的一些东西;一个网站的流程,由前端工程师 使用 HTMLCSSJa…

hibernate示例_通过示例Hibernate–第1部分(删除孤儿)

hibernate示例所以我想做一系列的冬眠例子,展示冬眠的各种特征。 在第一部分中,我想展示有关删除孤儿功能及其在故事情节中的使用方式。 因此,让我们开始:) 先决条件 : 为了尝试以下示例,您将需要以下提到的JAR文件&…

docker更换国内镜像源

国内下载docker镜像大部分都比较慢,下面给大家介绍2个镜像源。 一、阿里云的docker镜像源 注册一个阿里云用户,访问 https://cr.console.aliyun.com/#/accelerator 获取专属Docker加速器地址 使用的时候修改/etc/docker/daemon.json文件就可以了,修改保…

【APICloud系列|22】关于苹果开发者账号续费的总结

以前用APICloud开发的一款App应用,苹果开发者账号一般需要续费,按年收费,个人或者公司$99/年,企业$199年。里面涉及到的邓白氏编码,开通,证书,上架在这里不做讨论,需要的话可以看我以前的帖子。 使用APPuploader申请ios开发证书及ios发布证书教程 上架ios应用到苹果应用…

以编程方式衡量分配

我从Heinz Kabutz撰写的Java专家通讯中获得了这个技巧。 (对于所有想要了解JDK内容的Java开发人员来说,这是绝对必要的!) 特别是对于编写低延迟代码但对于普通Java代码的开发人员来说,分配是您真正要避免的事情。 有关…

(转)搞定DC/DC电源转换方案设计,必看金律十一条

[导读] 搞嵌入式的工程师们往往把单片机、ARM、DSP、FPGA搞的得心应手,而一旦进行系统设计,到了给电源系统供电,虽然也能让其精心设计的程序运行起来,但对于新手来说,有时可能效率低下,往往还有供电电流不足…

ThinkPHP 5.0.x、5.1.x、5.2.x 全版本远程命令执行漏洞

ThinkPHP 5.0.x、5.1.x、5.2.x 全版本远程代码执行漏洞 漏洞概述: ThinkPHP是一个快速、兼容而且简单的轻量级国产PHP开发框架。借鉴Struts框架的Action对象,同时也使用面向对象的开发结构和MVC模式。1月11日,ThinkPHP官方发布新版本5.0.24&#xff0c…

CSDN如何上传视频?

最近想在CSDN上面上传视频,发现找不到入口,包含APP和PC端的博客,无奈之下只能咨询客服, 这个是需要提前申请讲师资格,需要3年以上相关经验。 发布纯IT类视频,先申请讲师,讲师申请 按照提示信息…

读《数学之美》第四章 谈谈分词

中文分词其实有点像古代的句读(dou),韩愈的《师说》中就有:“彼童子之师,授之书而习其句读者也”。古人文章是没有标点符号的,行文一气呵成。如果不懂离经断句,就很难理解古文的意思。从某种程度…

【APICloud系列|17】百度开发者平台为了帮助开发者积极开展APP隐私合规风险排查工作, 准确高效的识别违规风险

前段时间开发了一款APP,最近有时间看看了一下自己的邮件。 发现一条比较有意思的。 申请入口 为什么会受到这个邮件呢,因为我安卓上架了华为应用商店、百度手机开放平台,小米应用商店,阿里应用分发平台、腾讯应用宝,360这个不谈,一个IOS的苹果应用商店。 这个只是针对那…

sphinx配置 + php

1. 为什么要使用Sphinx假设你现在运营着一个论坛,论坛数据已经超过100W,很多用户都反映论坛搜索的速度非常慢,那么这时你就可以考虑使用Sphinx了(当然其他的全文检索程序或方法也行)。 2. Sphinx是什么Sphinx由俄…

Java数字格式:DecimalFormat

在Java Numeric Formatting一文中 ,我描述并演示了NumberFormat静态方法提供的一些有用实例,例如NumberFormat.getNumberInstance(Locale) , NumberFormat.getPercentInstance(Locale) &#xf…

微信公众号(订阅号)如何开通付费功能?

前几天看了一下启舰的一个视频中谈到他做自媒体的收入,我记得应该有一年30多万的收入,大概组成是微信公众号广告每个月2万*12个月。两本安卓书收取版权提成,根据出版量8%-10%不等,他一年的出版量在10000左右吧,每本书每个月大概有2000元的样子*12个月,还有一些B站及其他的…

Kunyu(坤舆)

本文转载于&#xff1a;https://www.anquanke.com/post/id/248802 0x00 介绍 工具介绍 Kunyu (坤舆)&#xff0c;名字取自 <坤舆万国全图> &#xff0c;测绘实际上是一个地理信息相关的专业学科&#xff0c;针对海里的、陆地的、天上的地理信息进行盘点。同样应用于网络…