看了那么多博客。描述那么复杂,其实KVC很简单,没描述的那么复杂,所以写一篇简单的易于理解的博文,切入正文:

1.KVC底层是通过runtime对method和value操作
 比如说如下的一行KVC的代码:
[sit setValue:@"sitename" forKey:@"name"];

就会被编译器处理成:
SEL sel = sel_get_uid ("setValue:forKey:");

IMP method = objc_msg_lookup (site->isa,sel);

method(site, sel, @"sitename", @"name”);

前两步就是通过rt找到method,最后一步更新值;

2.KVO就是基于KVC添加了消息通知,观察者模式;

3.KVB 两个基本方法
1:为对象添加观察者OBserver
addObserver:forKeyPath:options:context: 
2:观察者OBserver收到信息的处理函数
observeValueForKeyPath:ofObject:change:context:

以下是使用Demo
1.直接在VC里面操作属性/变量(不推荐耦合度不好)
@property (nonatomic,strong) NSString *str1;
在viewDidLoad加入:
[self addObserver:self forKeyPath:@"str1" options:NSKeyValueObservingOptionNew context:nil];//第一步
[self setValue:@"草泥马KVO" forKey:@"str1”];//第二步

//回调方法
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context{
    if([keyPath isEqualToString:@"count"]){
        NSLog(@"count : %@",[change valueForKey:@"new"]);
    }
    
    if([keyPath isEqualToString:@"str1"]){
        NSLog(@"str1: %@",[change valueForKey:@"new"]);
    }
}

在第一步添加注册元素@“str1",然后第二步改变其值,此时第三步回调方法就会响应;

2.自定义类 OberserClass 
#import <Foundation/Foundation.h>

@interface OberserClass : NSObject
@property (nonatomic,assign) int count;
@end

#import "OberserClass.h"

@implementation OberserClass
@end
简单添加一个属性,什么也不做。然后在ViewDidLoad加入以下代码:

cls = [[OberserClass alloc]init];//cls必须是成员变量,不能是局部变量
    [cls addObserver:self forKeyPath:@"count" options:NSKeyValueObservingOptionNew context:nil];
    [cls setValue:@"456" forKey:@"count"];

执行到最后一步observeValueForKeyPath就会收到通知,处理@“count"

3.自定义类内部处理
和第二种不一样的是,在@implementation添加如下代码:

- (void)setCount:(int)count{
    _count = count;
    [self  addObserver:self forKeyPath:@"count" options:NSKeyValueObservingOptionNew context:nil];
}

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context{
    if([keyPath isEqualToString:@"count"]){
        NSLog(@"count is :");
    }
}

@end

demo下载地址:KVCDemo

iOS KVC/KVO/KVB的更多相关文章

  1. IOS开发之KVC KVO KVB

    KVC(Key Value Coding) KVO(Key Value Observing) KVB(Key Value Binding) KVO是Cocoa的一个重要机制,他提供了观察某一属性变化的 ...

  2. KVC , KVO , KVB

    来源:http://www.cnblogs.com/jay-dong/archive/2012/12/13/2815778.html 熟悉oc语法的同学也许都会懂得这么一点:在oc中,类的成员变量或是 ...

  3. iOS KVC,KVO

    链接(写得不错,着重kvc):http://www.cocoachina.com/industry/20140224/7866.html 链接:http://www.cnblogs.com/kensh ...

  4. iOS KVC/KVO 线程(GCP)

    最近比较忙,把学习知识点的帖子的地址记一下,有时间再好好整理. KVC/KVO1 KVC/KVO2 线程(GCP)

  5. iOS KVC 和 KVO 的学习

    KVC  (NSKey Value Coding) :键值编码 KVO (Key Value Observing) :键值监听 前言:我曾经用过 监听 一个音频何时结束 监听视频播放 状态等 用了这种 ...

  6. iOS KVC详细讲解

    iOS KVC详细讲解 什么是KVC? KVC即NSKeyValueCoding,就是键-值编码的意思.一个非正式的 Protocol,是一种间接访问对象的属性使用字符串来标识属性,而不是通过调用存取 ...

  7. KVC/KVO原理详解及编程指南

    一.简介 1.KVC简介 2.KVO简介 二.KVC相关技术 1.Key和Key Path 2.点语法和KVC 3.一对多关系(To-Many)中的集合访问器方法 4.键值验证(Key-Value V ...

  8. 【转】 KVC/KVO原理详解及编程指南

    原文地址:http://blog.csdn.net/wzzvictory/article/details/9674431 前言: 1.本文基本不讲KVC/KVO的用法,只结合网上的资料说说对这种技术的 ...

  9. 转:KVC/KVO原理详解及编程指南

      作者:wangzz 原文地址:http://blog.csdn.net/wzzvictory/article/details/9674431 转载请注明出处 如果觉得文章对你有所帮助,请通过留言或 ...

随机推荐

  1. ElasticSearch在Azure中的集群配置和Auto-Scale

    最近在项目中ElasticSearch的使用越来越多,最新的项目中要求ES使用集群,在啥都不知道的情况下弄了两天后,终于搞定,因此写个笔记记录下. 1.首先我们需要创建一个Virtual networ ...

  2. UVa 11039 (排序+贪心) Building designing

    白书上的例题比较难,认真理解样例代码有助于提高自己 后面的练习题相对简单,独立思考解决问题,增强信心 题意:n个绝对值各不相同的非0整数,选出尽量多的数排成序列,使得该序列正负交错且绝对值递增. 解法 ...

  3. UIDevice通知

    UIDevice通知 UIDevice类提供了一个单例对象,它代表着设备,通过它可以获得一些设备相关的信息,比如电池电量值(batteryLevel).电池状态(batteryState).设备的类型 ...

  4. (转载)目前最细致清晰的NSDictionary以及NSMutableDictionary用法总结

    文章转载自:http://www.cnblogs.com/wengzilin/archive/2012/03/15/2397712.html 做过Java语言 或者 C语言 开发的朋友应该很清楚 关键 ...

  5. Windows Tftpd32 DHCP服务器 使用

    /********************************************************************* * Windows Tftpd32 DHCP服务器 使用 ...

  6. smarty 初始配置文件

    <?php define("ROOT",str_replace("\\","/",dirname(__FILE__)).'/'); r ...

  7. BPMN这点事-BPMN扩展元素

    什么是BPMN扩展元素?我们为什么要从BPMN元素中界定出一个扩展元素的子集?BPMN扩展元素是我们平时使用频率不高的BPMN元素,这些元素更多的面向开发人员而不是业务人员,它们强调流程执行的细节,例 ...

  8. 极大似然估计&最大后验概率估计

    https://guangchun.wordpress.com/2011/10/13/ml-bayes-map/ http://www.mi.fu-berlin.de/wiki/pub/ABI/Gen ...

  9. 【英语】Bingo口语笔记(79) - fish系列

  10. 聊聊Dataguard的三种保护模式实验(上)

    Data Guard是Oracle高可用性HA的重要解决方案.针对不同的系统保护需求,DG提供了三种不同类型的保护模式(Protection Mode),分别为:最大保护(Maximum Protec ...