我所认为的KVC和KVO
引子:
为什么要写这个,只是突然一个念头闪现,说一下本人目前理解。
KVC:
Key-value coding,它是一种使用字符串标识符,间接访问对象属性的机制。但是关就这一点来说,这么久以来确实没怎么体会到用这个的好处,我没有明显的理由用setValut:forKey 而不是直接用一个属性。当然,KVC是KVO实现的基础,这个基础究竟是什么?下来道来
KVO:
KVO其实就是一种观察者模式的实现。两个角色:被观察者A和观察者B。假如B观察A的某一个属性,那么当A的这个属性值发生改变的时候就会通知B。那么基本原理可以认为是只要A的被监听属性发生变化就会调用B的 - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context;来通知B。
这个属性变化有两种可能:一是通过调用属性(直接调用setter或KVC寻找到setter)改变,二是通过KVC直接改变属性对应的实例变量。后者显然是不可行的,改变的时候不具备一个发送通知的时机。那么只有第一种情况,但是要在setter方法里面发送通知,原生的属性并没有实现这个功能,所以系统的做法是当对象A被监听的时候就创建一个该类Class_A对应的派生类Class_KVO_A(注:类名只为示意),然后重写被监听属性的setter方法,被重写的setter具有发送通知的能力,然后把对象A的isa指针指向Class_KVO_A,那么以后当A的被观察属性改变的时候就会调用Class_KVO_A的setter方法改变值并且向观察者B发送通知。至于说KVC是KVO的基础,个人感觉KVO用到KVC的一点也就是可以通过[setValue:forKey]同样可以找到setter方法,如果KVC是KVO的基础,那没有KVC是不是KVO就不能实现了?但是显然不是这样的,没有KVC只是不能通过[setValue:forKey]这样的方式去改变属性值而已。
@mic
(Email:yangxu0905@foxmail.com)
我所认为的KVC和KVO的更多相关文章
- 11. KVC And KVO
1. KVC And KVO 的认识 KVC/KVO是观察者模式的一种实现 KVC全称是Key-value coding,翻译成键值编码.顾名思义,在某种程度上跟map的关系匪浅.它提供了一种使用 ...
- iOS - 详细理解KVC与KVO
详细理解KVC与KVO 在面试的时候,KVC与KVO有些时候还是会问到的,并且他们都是Objective C的关键概念,在这里我们先做一个简单地介绍: (一)KVC: KVC即指:NSKeyValue ...
- KVC 与 KVO 理解
KVC 与 KVO 是 Objective C 的关键概念,个人认为必须理解的东西,下面是实例讲解. Key-Value Coding (KVC) KVC,即是指 NSKeyValueCoding,一 ...
- 【原】iOS中KVC和KVO的区别
在iOS开发中经常会看到KVC和KVO这两个概念,比较可能混淆,特地区分一下 KVC(Key Value Coding) 1> 概述 KVC:Key Value Coding,键值编码,是一种间 ...
- IOS之KVC和KVO(未完待续)
*:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } ...
- KVC和KVO的区别
kvc和kvo 1.kvc Key-Value Coding (KVC) KVC,即是指 NSKeyValueCoding,一个非正式的 Protocol,提供一种机制来间接访问对象的属性.KVO 就 ...
- 谈KVC、KVO(重点观察者模式)机制编程
一不小心,小明在<跟着贝尔去冒险>这个真人秀节目中看到了“一日警察,一世警察”的Laughing哥,整个节目除了贝尔吃牛睾丸都不用刀叉的不雅餐饮文化外,还是镜头少普通话跟小明一样烂的Lau ...
- iOS中关于KVC与KVO知识点
iOS中关于KVC与KVO知识点 iOS中关于KVC与KVO知识点 一.简介 KVC/KVO是观察者模式的一种实现,在Cocoa中是以被万物之源NSObject类实现的NSKeyValueCodin ...
- 聊聊 KVC 和 KVO 的高阶应用
KVC, KVO 作为一种魔法贯穿日常Cocoa开发,笔者原先是准备写一篇对其的全面总结,可网络上对其的表面介绍已经够多了,除去基本层面的使用,笔者跟大家谈下平常在网络上没有提及的KVC, KVO进阶 ...
- KVC 与 KVO 理解-b
KVC 与 KVO 是 Objective C 的关键概念,个人认为必须理解的东西,下面是实例讲解. Key-Value Coding (KVC) KVC,即是指 NSKeyValueCoding,一 ...
随机推荐
- html-禁用右键、键盘F12、网页上选取内容、复制、粘贴
摘要 为了保护我们的代码,我们需要想些办法禁止复制. css: body{ -webkit-touch-callout: none; -webkit-user-select: none; ...
- Cryptography I 学习笔记 --- 绪论
课程地址 1. 密码学可以用于保证消息传递的机密性(第三方不可能得到明文)与完整性(密文如果被第三方篡改,有手段可以检测到) 2. 数字签名(用私钥加密待签名文件的hash值) 3. 匿名通信(mix ...
- Wannafly挑战赛16
E(pbds) 题意: 1<=m,n<=5e5 分析: 首先指向关系形成了一个基环外向树森林 实际上我们可以完全不用真正的去移动每个球,而只需要在计数的时候考虑考虑就行了 对于树上的情况, ...
- REBXOR
题面 Description 给定一个含N个元素的数组A,下标从1开始.请找出下面式子的最大值. (A[l1]xorA[l2+1]xor-xorA[r1])+(A[l2]xorA[l2+1]xor-x ...
- scala工具sbt的安装和使用;idea如何创建scala项目
scala的sbt类似于java的maven mac:brew install sbt linux:yum Install sbt 或者下载二机制包 使用sbt需要想mvn一样搭建公司私服,不然,下载 ...
- Mac 安装配置Mysql
Mac下安装配置Mysql By 白熊花田(http://blog.csdn.net/whiterbear) 转载需注明出处,谢谢. 下载安装 去官网下载Community版本号的mysql安装文件. ...
- Win7安装软件,界面上中文显示乱码的解决方案
“Control panel”->"Clock,Language and Region"->"Region and Language"->第四 ...
- 修改 百度地图 infowindow 默认样式
1.百度 api 没有 提供可以修改 infowindow 默认样式的 方法. 如需修改,需要 自定义 替换 默认样式. demo.html <!DOCTYPE html> <htm ...
- shell(2):正则表达式
一.整理正则表达式博客 (1)正则 正则就是用一些具有特殊含义的符号组合到一起(称为正则表达式)来描述字符或者字符串的方法.或者说:正则就是用来描述一类事物的规则. 在linux中,通配符是由shel ...
- MOS简介
功率半导体器件机能 MOS管(击穿原因),它采用“超级结”(Super-Junction)结构,故又称超结功率MOSFET.全数字控制是发展趋势,已经在很多功率变换设备中得到应用.既管理了对电网的谐波 ...