kvc VS kvo
Kvo是Cocoa的一个重要机制,它主要是用于对一个属性的新旧值的监控。
例如说依据A(数 据类)的某个属性值变化,B(view类)中的某个属性做出对应变化。对于MVC,kvo应用的地方很广泛。
使用kvo流程:
1 注冊:
-(void)addObserver:(NSObject *)observer forKeyPath:(NSString *)keyPath options:(NSKeyValueObservingOptions)options context:(void*)context
keyPath就是要观察的属性值,options给你观察键值变化的选择。而context方便传输你须要的数据
2 实现变化方法:
-(void) observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object
change:(NSDictionary *)change context:(void*)context
change里存储了一些变化的数据,比方变化前的数据。变化后的数据
KVC是一种间接訪问对象属性(用字符串表征)的机制,而不是直接调用对象的accessor方法或是直接訪问成员对象。
key就是确定对象某个值的字符串,它通常和accessor方法或是变量同名。Key path就是以“.”分隔的key。由于属性值也能包括属性。
获取属性值时能够通过valueForKey:的方法,设置属性值用setValue:forKey:。
与此同一时候,KVC还对没有定义的属性值定义了 valueForUndefinedKey:,你能够重载以获取你要的实现
在O-C 2.0引入了property。我们也能够通过.运算符来訪问属性,比如:
@property NSInteger number;
instance.number =5;
[instance setValue:[NSNumber numberWithInteger:5] forKey:@"number"];
以上介绍了通过KVC来获取/设置属性。接下来要说明下实现KVC的訪问器方法。
-key:。以及setKey:(使用的name convention和setter/getter命名一致)。对于没有定义的属性能够用setNilValueForKey:。
在ios中,array往往做为tableview的数据源,比如:
如果我们已经有N条数据,在进行了某个操作后,有在原先的数据后多了几条记录。或者对N中的某些数据进行更新替换。不使用KVC我们能够使用 reloadData方法或reloadRowsAtIndexPaths。前一种的弊端在于如果N非常大消耗就非常大。试想你仅仅加入了几条数据却要重载之前 N数据。
后一种方法的不足在于代码会非常冗余,你要一次计算各个indexPath再去reload。并且还要提前想好到底在哪些情况下会引起数据更新,
倘若使用了KVC。你将不用关心追加或是更新多少条数据。
实现insertObject:inKeyAtIndex:或者insertKey:atIndexes。同一时候在kvo中我们能够通过change这个dictionary得知发生了哪种变化来做对应的处理。
kvc VS 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,一 ...
随机推荐
- 【java_设计模式】建造者模式
应用场景对生成对象进行链式配置好处:按需配置对象,灵活修改默认配置,比构造方法创建对象更直观. public static void init() {if (okHttpClient == null) ...
- spring中路径的注入
@RequestMapping("${mgt}/file") //请求的路径的统一添加,需要在mvc层配置<context:property-placeholder loca ...
- CREATE TRIGGER - 定义一个新的触发器
SYNOPSIS CREATE TRIGGER name { BEFORE | AFTER } { event [ OR ... ] } ON table [ FOR [ EACH ] { ROW | ...
- 03HibernateJAVA类与数据库表映射配置
HibernateJAVA类与数据库表映射配置
- HashMap、ConcurrentHashMap以及HashTable(面试向)
---->HashMap 在java1.7中,hashmap的数据结构是基于数组+链表的结构,即我们比较熟悉的Entry数组,其包含的(key-value)键值对的形式.在多线程环境下,Hash ...
- 【转】Delphi 文件拖放
转自:万一的博客. 原理分析: 这需要用到 ShellAPI 单元的两个函数: DragAcceptFiles.DragQueryFile; 用 DragAcceptFiles(窗口句柄, True) ...
- windows枚举串口
1. 枚举键值 HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\SERIALCOMM 2. SETUPAPI方式 int EnumPortsWdm() { int i, d ...
- CODE【VS】 3160 最长公共子串 (后缀数组)
3160 最长公共子串 题目描述 Description 给出两个由小写字母组成的字符串,求它们的最长公共子串的长度. 输入描述 Input Description 读入两个字符串 输出描述 Outp ...
- UVA 12100 打印队列(STL deque)
题意: 给定n个优先级打印队列,然后从0开始编号到n-1.出队一个元素,如果他是队列中优先级最高的,打印(耗时一分钟),否则放到队尾(不耗时).给定一个m,求位置m的文件打印的时间. 分析: 用一个p ...
- java程序验证用户名密码和验证码登录的小例子
package Study02; import java.util.Random; import java.util.Scanner; public class test { static Strin ...