我所认为的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,一 ...
 
随机推荐
- 一次完整的http请求过程以及网络I/O模型select、epoll
			
a.一次完整的http请求过程 1.域名解析,得到域名对应的IP; 2.三次握手,客户端与服务器通过socket建立TCP/IP连接; 3.浏览器向服务器发送http请求,如:GET/index.ht ...
 - nginx 自签名https
			
繁杂的命令,以下准备写好的sh,拷贝https.sh文件,设置执行权限:chmod u+x https.sh #!/bin/sh # create self-signed server certifi ...
 - TClientDataSet的 fastscript封装
			
TClientDataSet的 fastscript封装 // 陈新光 2017-2-10// TClientDataSet's fastscript unit fs_ClientDataSet; i ...
 - 主流浏览器js 引擎内核市场份额attialx总结vOa9
			
原文: http://blog.csdn.net/attilax/article/details/40016... 时间: 2014-10-12 atitit.. 主流浏览器 js 引擎 内核 市场份 ...
 - Node之父ry发布新项目deno:下一代Node
			
https://mp.weixin.qq.com/s/1LcO3EqGV2iRlZ1aIrQeqw
 - SilverLight:基础控件使用(5)-TreeView控件-基本使用
			
ylbtech-SilverLight-Basic-Control:基础控件使用(5)-TreeView控件-基本使用 前台编辑 后台逐个添加 后台绑定数据源 1.A,返回顶部TreeView控件(树 ...
 - 我的Android进阶之旅------>怎样解决Android 5.0中出现的警告: Service Intent must be explicit:
			
我的Android进阶之旅-->怎样解决Android 5.0中出现的警告: java.lang.IllegalArgumentException: Service Intent must be ...
 - 我的Android进阶之旅------>解决:Execution failed for task ':app:transformResourcesWithMergeJavaResForDebug'.
			
错误描写叙述 今天在Android Studio项目中添加了jackson的开发包,编译执行时候.引发了例如以下的错误: Error:Execution failed for task ':app:t ...
 - iOS设计模式 - (2)UML类间关系精解
			
在正式讲设计模式之前, 介绍一下UML类图之间的关系还是非常有必要的, 由于一些教程, 书籍, 包含我之后的文章, 都会大量使用类图, 去描写叙述各个类之间的关系.这是一种非常直观, 简约的方式. 当 ...
 - 【每日Scrum】第七天(4.28)Sprint2总结性会议
			
本次会议主要是演示了一下本组项目的各项功能,每个人负责那一块儿功能由本人来负责说明和演示,确定alpha版本的发布时间,并且分派了各组员的文档负责情况,上图是会议记录,下面我详细介绍一下我组分派情况: ...