iOS KVC 和 KVO 区别简单总结
KVC:
key value coding,键值编码.是一种通过使用属性的名称(key)来间接访问对象属性的方法.这个方法可以不用通过 setter/getter 方法来访问对象的属性.该方法使用的实质是,是使用 valueForKey来代替 getter 方法, setValueForKey 来代替 setter 方法.
KVC 常用的方法:
- (id)ValueForKey: 通过 key 值读取对象的属性
-(id)setValue: forKey: 通过 key 的值来使用属性
-(id)setNilValueForKey: 将给的 key 字对应的 value 值设置为 nil
-(id)setValueForUndefinedKey: 错误拦截,在 KVC 没有找到 key 值时调用.
KVC 的特点:
- 既可以取值也可以赋值.
- KVC 是一种间接传值,该方式有利于解耦合.
- KVC 可以对只读属性/私有属性赋值
- KVC 有自动装箱(自动类型转换)的功能.
- 支持键值路径
键值路径:说白了就是对嵌套比较深的key 取值.主要表现在两个方法之间的区别setValue: forKey: 和 setValue: forKeyPath:
setValue: forKey: 方法,在使用的时候只是在本层中查找 key 值进行赋
setValue: forKeyPath: 方法在使用的时候,根据传进来的 key 值在整个项目中查找.直到查找到该 key 值后对其赋值.
- KVC提供了avg,sum,max,min,count 等函数,在可以直接使用
KVC 的缺点
- 由于 KVC 是通过 key 字符串进行属性的访问的,所以编译器无法检测说给的 key 值的正确性
- KVC 的执行效率要比 setter 和 getter 方法的低,因为 KVC 要先解析说给的 key 值,然后才去访问对应的属性.
KVC 的实现原理:
KVC 首先根据传入的 anyKey(以此 key 为例)值去查找对象中是否含有anyKey的方法,找到了就直接使用,如果没有找到就继续查找是否含有anyKey的属性,找到的话直接使用,如果没有找到,则试图调用 setValueForUndefineKey,如果该方法没有实现,则会报错.
注: KVC 查找anyKey的方法和属性的时候,不仅仅查找anyKey,还会查找 _anyKey , getAnyKey 和_getAnyKey
KVO:
Key value observing,键值监听,通俗点说就是当指定的对象的属性改变的时候,对象就会接到通知.也就是说,每次指定的对象发生改变的时候,对应的监听者就会接收到信息.
KVO 的使用原理:
KVO:键值监听.是 cocoa 框架实现的观察者模式,一般和 KVC 搭配使用.通过 KVO 可以监测一个值的变化.是一个一对多的关系,即一个值发生了变化,会通知所有的观察者.
KVO 的使用方法:
- 注册
- 使用回调方法.
- 移除观察者
iOS KVC 和 KVO 区别简单总结的更多相关文章
- iOS:KVC和KVO
来源: 对月流 链接:http://www.jianshu.com/p/f1393d10109d 写在前面: 关于KVC和KVO各种博客多了去了,重新整理下,就当是温习一下吧,也还算是个新手,不对的 ...
- iOS KVC 和 KVO 的学习
KVC (NSKey Value Coding) :键值编码 KVO (Key Value Observing) :键值监听 前言:我曾经用过 监听 一个音频何时结束 监听视频播放 状态等 用了这种 ...
- [iOS] KVC 和 KVO
开发iOS经常会看见KVO和KVC这两个概念,特地了解了一下. 我的新博客wossoneri.com link KVC Key Value Coding KVC是一种用间接方式访问类的属性的机制.比如 ...
- iOS监听模式系列之键值编码KVC、键值监听KVO的简单介绍和应用
键值编码KVC 我们知道在C#中可以通过反射读写一个对象的属性,有时候这种方式特别方便,因为你可以利用字符串的方式去动态控制一个对象.其实由于ObjC的语言特性,你根部不必进行任何操作就可以进行属性的 ...
- 【原】iOS中KVC和KVO的区别
在iOS开发中经常会看到KVC和KVO这两个概念,比较可能混淆,特地区分一下 KVC(Key Value Coding) 1> 概述 KVC:Key Value Coding,键值编码,是一种间 ...
- iOS开发-KVC和KVO的理解
KVC和KVO看起来很专业,其实用起来还是比较简单的,KVC(Key-value coding)可以理解为键值对编码,如果对象的基本类型,那么键值对编码实际上和get,set方法没有区别,如果是属性是 ...
- iOS编程——Objective-C KVO/KVC机制[转]
这两天在看和这个相关的的内容,全部推翻重写一个版本,这是公司内做技术分享的文档总结,对结构.条理做了更清晰的调整.先找了段代码,理解下,网上看到最多的一段的关于KVC的代码 先上代码 1. 1 ...
- iOS编程——Objective-C KVO/KVC机制
来源:http://blog.sina.com.cn/s/blog_b0c59541010151s0.html 这两天在看和这个相关的的内容,全部推翻重写一个版本,这是公司内做技术分享的文档总结,对结 ...
- iOS开发系列--Objective-C之KVC、KVO
概述 由于ObjC主要基于Smalltalk进行设计,因此它有很多类似于Ruby.Python的动态特性,例如动态类型.动态加载.动态绑定等.今天我们着重介绍ObjC中的键值编码(KVC).键值监听( ...
随机推荐
- MySQL server has gone away 问题的解决方法(转)
mysql出现ERROR : (2006, 'MySQL server has gone away') 的问题意思就是指client和MySQL server之间的链接断开了. 造成这样的原因一般是s ...
- surface知识点
SurfaceView和TextureView 在学习直播的过程遇到一个问题:连麦场景下能够支持大小窗口切换(即小窗口变大,大窗口变小),大窗口是TextView(用于拉流显示),而小窗口是Surfa ...
- 20145326实验四 Android开发基础
20145326实验四 Android开发基础 一.实验内容及步骤 安装 JDK 并配置 JDK 环境变量 找到之前path变量中的jdk文件所在位置并复制. 并用复制的变量名新建一个 JAVA_HO ...
- anaconda + tensorflow +ubuntu 超级菜鸟,大家多指正【转】
本文转载自:https://blog.csdn.net/zzw000000/article/details/51203331 1.首先安装Anaconda 下载linux对应的anaconda版本,下 ...
- 百度语音识别vs科大讯飞语音识别
一.结果 从笔者试验的结果来看,科大讯飞的语音识别技术远超百度语音识别 二.横向对比 科大讯飞语音识别 百度语音识别 费用 各功能的前5小时免费 全程免费 转换精准率 非常高 比较低 linux ...
- HDU 2222 Keywords Search(AC自动机)题解
题意:给你几个keywords,再给你一段文章,问你keywords出现了几次. 思路:这里就要用到多模匹配算法AC自动机了,AC自动机需要KMP和字典树的知识,匹配时是在字典树上,失配我们就要用到类 ...
- 连接数据库的DBUtils工具类
import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import ...
- codeforces 98 div2 C.History 水题
C. History time limit per test 2 seconds memory limit per test 256 megabytes input standard input ou ...
- 【转】Scala基础知识
原文地址.续 课程内容: 关于这节课 表达式 值 函数 类 继承 特质 类型 apply方法 单例对象 函数即对象 包 模式匹配 样本类 try-catch-finally 关于这节课 最初的几个星期 ...
- PHPUnit简介及使用(thinkphp5的单元测试安装及使用)
PHPUnit简介及使用(thinkphp5的单元测试安装及使用) 一.总结 一句话总结:直接google这个phpunit(how to use phpunit),然后去官网看使用样例和手册,那些英 ...