KVC 和 KVO

作者 冲破茧缚 2015.08.28 16:12*
写了3967字,被8人关注,获得了14个喜欢

KVC 和 KVO

字数363 阅读32 评论0 

KVC

  • (Key Value Coding),键值编码,通过键值(字符串)来访问属性的机制,来间接修改属性值
  • 使用方法
    • 赋值 setValue:forKey:
      • 例如:[person setValue:@"Jack" forKey:@"name"];,执行这个方法时会优先调用setName:方法,如果没有这个方法,则会直接修改name或者_name这个成员变量
    • 取值 valueForKey:
      • 例如:id name = [person valueForKey:@"name"];,执行这个方法时会优先调用name方法,如果没有这个方法,则会直接读取name或者_name这个成员变量

KVO

  • (Key Value Observing),监听模型属性值的改变
 //cc监听了aa的name属性的改变
[aa addObserver:cc forKeyPath:@"name" options: NSKeyValueObservingOptionOld context:nil];// cc得实现监听方法 /** * 当监听到object的keyPath属性发生了改变 */ - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { NSLog(@"监听到%@对象的%@属性发生了改变, %@", object, keyPath, change); } //退出时移除监听的属性 - (void)dealloc { [self.p1 removeObserver:self forKeyPath:@"name"]; }
  • KVO是基于Runtime机制实现的
  • 当对象执行完addObserver:forKeyPath: options:context:后,系统会在运行期动态创建一个新的子类,并将对象的isa指针指向该类,该类会重写set方法,set方法里面先实现super的set方法,再调用监听器的observeValueForKeyPath: ofObject: change: context:方法通知监听器属性值发生改变
 推荐拓展阅读

转载于:https://www.cnblogs.com/baiwulong/p/5489593.html

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

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

相关文章

Atmel megaAVR控制器 串行引导Bootloader

开始研究下Bootloader的代码结构 2015.1.9 粗略看了下,Bootloader主要做了下板卡的初始化 -----> 然后进入for( ; ; )死循环 -----> 循环刷新串口数据 -----> 根据数据做出不同应答 -----> 如果有写数据,则将数据存入buffer …

MapReduce入门2-流量监控

3、流量监控汇总(使用LongWritable实现) hdfs文件路径:/tmp/flow.txt 查看文件内容: 13770759991 50 100 25 400 13770759991 800 600 500 100 13770759992 400 300 250 1400 13770759992 800 1200 600 900字符串含义:…

【fiddler学习问题记录】——手机端证书下载页打不开、无法将此证书安装(已解决)

目录 1、手机端下载页打不开 解决方法1)电脑端——将网络设置成公用(亲测有效) 解决方法2)手机端将fiddler设置为信任应用,不被拦截 (未试) 2、无法将此证书安装 方法一:修改证书…

HALCON示例程序ball电路板焊点识别、检测、测量程序剖析

HALCON示例程序ball电路板焊点识别、检测、测量程序剖析 示例程序源码(加注释) 介绍: ball.hdev: Inspection of Ball Bonding *halcon窗口实时更新关闭 dev_update_window (‘off’) *halcon关闭所有窗口 dev_close_window () *halcon打开…

舵机的原理和控制

控制信号由接收机的通道进入信号调制芯片,获得直流偏置电压。它内部有一个基准电路,产生周期为20ms,宽度为1.5ms的基准信号,将获得的直流偏置电压与电位器的电压比较,获得电压差输出。最后,电压差的正负输出…

HDFS清理坏块

报错 Failed with exception java.io.IOException:org.apache.hadoop.hdfs.BlockMissingException: Could not obtain block: BP-1921057509-192.168.57.129-1517160177567:blk_1073741930_1106 file/user/hive/warehouse/db_hive.db/student/student.txt Time taken: 0.104 se…

如何在PowerDesigner将PDM导出生成WORD文档或者html文件

a) 使用PowerDesigner打开pdm文件 b) 点击Report Temlates 制作模板 点击PowerDesigner菜单栏“Report” -> “Report Templates” c) 选择模板数据项 完成步骤a),得到如下界面,左右2个区,Aavailable区…

【软件测试】——基础篇(软件测试技术体系、过程管理)

目录 软件测试技术体系 软件测试过程管理​编辑 接口测试用例设计 手机端测试流程​编辑 软件测试技术体系 软件测试过程管理 接口测试用例设计 手机端测试流程

vue 的常用模块安指令(持续记录)

# 全局安装 vue-cli $ cnpm install --global vue-cli# 创建一个基于 webpack 模板的新项目 $ vue init webpack my-project # 路由管理模块 $ npm install vue-router --save # 状态管理模块 $ npm install vuex --save # 网络请求模块 $ npm install vue-resource --save # 停…

HALCON基于形状匹配详解

HALCON基于形状的模板匹配详细说明 很早就想总结一下前段时间学习HALCON的心得,但由于其他的事情总是抽不出时间。去年有过一段时间的集中学习,做了许多的练习和实验,并对基于HDevelop的形状匹配算法的参数优化进行了研究,写了一…

俄罗斯:自由软件在这里生根

2008年6月15日,我在“俄罗斯:自由软件在这里起飞“一文中介绍了自由软件在俄罗斯的发展情况。现在,许多年过去了,实际情况如何呢? 回顾以往,俄罗斯境内自由软件的精英们,在2001年组建了ALTLinux…

小米出招黑科技,5S或成全球首款”Under glass“指纹识别手机

这一次,小米PK苹果,小米胜。 不得不说,最近的手机圈真是热闹,继三星Note 7爆炸、苹果iPhone 7发布一度成为新闻热点之后,小米又来暗戳戳地抢风头了。 最近小米即将发布的两款新旗舰消息扎堆,其中基本已经确…

sql中实现取得某字段中数字值

ALTER function [dbo].[GetNum](a nvarchar(4000)) returns nvarchar(4000) as begin while patindex(%[^0-9]%,a)>0 begin set astuff(a,patindex(%[^0-9]%,a),1,) end--select a --299 return a end 例如: 转载于:https://www.cnblogs.com/fish-ycq/p/6433562.ht…

Java 中 String 的常用方法(二)

本文介绍剩下的一些常用的 String 中的方法。 1、replace 方法 、replaceFirst 方法和 replaceAll 方法 replace(char oldChar, char newChar)Returns a string resulting from replacing all occurrences of oldChar in this string with newChar. replace(CharSequence targe…

【adb错误修复】adb version(39) doesn‘t match the client(40),killing...

问题原因: 由于服务端的adb版本和客户端的adb版本不一样【哪个是客户端哪个是服务端我也不清楚】 解决方法: adb kill-serveradb start-server

HALCON示例程序ball电路板焊点识别、检测、测量程序2剖析(与上篇文章使用了不同方法)

HALCON示例程序ball电路板焊点识别、检测、测量程序2 示例程序源码(加注释) *这是关于显示的函数,已经介绍过了 dev_update_off () *定义一个字符串变量ImageNames,ImageNames[0]的含义为’die/die_02’以此类推 ImageNames : ‘…

arduino 程序的机制

从一个简单的 arduino 程序说起: /*BlinkTurns on an LED on for one second, then off for one second, repeatedly.This example code is in the public domain.*/// Pin 13 has an LED connected on most Arduino boards. // give it a name: int led 13;// the…

电池技术多年没有较大发展,成为移动设备最大制约

各大厂商致力于发展闪充技术以此解决电池续航问题。 对于电子产品来说,不管是什么,我们最头疼的无疑就是电池问题了。而电池的重要性更是不用多说,但是,以目前的科技水平来看,就拿智能手机的CPU等功能来说&#xff0c…

什么样的数据应该放入缓存

把数据放入缓存,有三个标准: 1.数据量不大 2.访问频率高 3.数据更改频率低转载于:https://www.cnblogs.com/hwgok/p/5494915.html

VMWare 安装 Eclipse

由于之前已经安装了 OpenJDK 所以 这次我们可以直接下载 eclipse来安装。 Eclipse 下载:http://www.eclipse.org/downloads/?osTypelinux&releaseundefined 如果下载后 在 下载目录,运行解压 (我下载的:eclipse-inst-lin…