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的更多相关文章

  1. 11. KVC And KVO

    1. KVC And KVO  的认识 KVC/KVO是观察者模式的一种实现  KVC全称是Key-value coding,翻译成键值编码.顾名思义,在某种程度上跟map的关系匪浅.它提供了一种使用 ...

  2. iOS - 详细理解KVC与KVO

    详细理解KVC与KVO 在面试的时候,KVC与KVO有些时候还是会问到的,并且他们都是Objective C的关键概念,在这里我们先做一个简单地介绍: (一)KVC: KVC即指:NSKeyValue ...

  3. KVC 与 KVO 理解

    KVC 与 KVO 是 Objective C 的关键概念,个人认为必须理解的东西,下面是实例讲解. Key-Value Coding (KVC) KVC,即是指 NSKeyValueCoding,一 ...

  4. 【原】iOS中KVC和KVO的区别

    在iOS开发中经常会看到KVC和KVO这两个概念,比较可能混淆,特地区分一下 KVC(Key Value Coding) 1> 概述 KVC:Key Value Coding,键值编码,是一种间 ...

  5. IOS之KVC和KVO(未完待续)

    *:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } ...

  6. KVC和KVO的区别

    kvc和kvo 1.kvc Key-Value Coding (KVC) KVC,即是指 NSKeyValueCoding,一个非正式的 Protocol,提供一种机制来间接访问对象的属性.KVO 就 ...

  7. 谈KVC、KVO(重点观察者模式)机制编程

    一不小心,小明在<跟着贝尔去冒险>这个真人秀节目中看到了“一日警察,一世警察”的Laughing哥,整个节目除了贝尔吃牛睾丸都不用刀叉的不雅餐饮文化外,还是镜头少普通话跟小明一样烂的Lau ...

  8. iOS中关于KVC与KVO知识点

    iOS中关于KVC与KVO知识点 iOS中关于KVC与KVO知识点  一.简介 KVC/KVO是观察者模式的一种实现,在Cocoa中是以被万物之源NSObject类实现的NSKeyValueCodin ...

  9. 聊聊 KVC 和 KVO 的高阶应用

    KVC, KVO 作为一种魔法贯穿日常Cocoa开发,笔者原先是准备写一篇对其的全面总结,可网络上对其的表面介绍已经够多了,除去基本层面的使用,笔者跟大家谈下平常在网络上没有提及的KVC, KVO进阶 ...

  10. KVC 与 KVO 理解-b

    KVC 与 KVO 是 Objective C 的关键概念,个人认为必须理解的东西,下面是实例讲解. Key-Value Coding (KVC) KVC,即是指 NSKeyValueCoding,一 ...

随机推荐

  1. Swift 命名空间形式扩展的实现

    Swift 的 extension 机制很强大,不仅可以针对自定义的类型,还能作用于系统库的类型,甚至基础类型比如 Int.当在对系统库做 extension 的时候,就会涉及到一个命名冲突的问题.O ...

  2. vue面试相关

    (1)什么是mvvm?    MVVM是Model-View-ViewModel的缩写.mvvm是一种设计思想.Model 层代表数据模型,也可以在Model中定义数据修改和操作的业务逻辑:View ...

  3. 网络爬虫之框架(Scrapy)

    Scrapy爬虫框架 爬虫框架是实现爬虫功能的一个软件结构和功能组件集合. 爬虫框架是一个半成品,能够帮助用户实现专业网络爬虫. Scrapy爬虫框架结构:

  4. ansible API(开发应用)

    7. ansible API(开发应用) 官网链接

  5. 入门迅速、应用广泛、月薪两万,马哥Python前景为什么这么好?

    随着Python的技术的流行,Python在为人们带来工作与生活上带来了很多的便捷,因为Python简单,学起来快,也是不少新手程序员入门的首选语言.新手们比较关心的就是Python的发展前景与方向. ...

  6. SpringBoot 全局处理以及注入请求参数

    后端接口,经常会用token获取对应的账号信息.于是考虑将这个步骤封装起来. 之前项目使用ThreadLocal去做这样的事情,但昨天看SpringBoot的官方文档,发现借助框架的功能也可以做这样的 ...

  7. laravel学习笔记2--表单

    一.Controller 1.Request 1.1.取值:input // 1.取值 echo $request->input('name'); // 2.取不到值时打印默认值 echo $r ...

  8. 【转载】分布式系列文章——Paxos算法原理与推导

    转载:http://linbingdong.com/2017/04/17/%E5%88%86%E5%B8%83%E5%BC%8F%E7%B3%BB%E5%88%97%E6%96%87%E7%AB%A0 ...

  9. Python爬虫例子(笔记,不适合参考,愿意看的可以看看)

    话不多说,直接上代码: import re import csv #爬虫的一个小例子,爬的是百度贴吧(网页版)某个帖子的各个楼层的用户名,发言内容和发言时间(使用到了正则表达式) source3.tx ...

  10. Mybatis传递多个参数的4种方式(干货)

    Mybatis传递多个参数的4种方式(干货)-----https://blog.csdn.net/youanyyou/article/details/79406486