KVO与KVC的使用(转)
转自http://www.cnblogs.com/mybkn/archive/2013/05/29/3104166.html
KVO:
在看KVO之前,有必要先了解下KVC,即,Key-Value Coding 键值对编程。通过key-value可以方便的存取数据。
具体的操作简单说就是:setValue:forKey: valueForKey:
//book Object
//.h
#import <Foundation/Foundation.h>
@class Author;
@interface Book : NSObject{
NSString *name;
Author *author;
float price;
NSArray *relativeBooks;
}
@end
#import "Book.h"
@implementation Book
@end
Book *book = [[Book alloc] init];
[book setValue:@"iOS book" forKey:@"name"];//这里要注意实例变量的名字不要写错,写错了不会有提示
NSString *name = [book valueForKey:@"name"];
NSLog(@">> %@",name); Author *author = [[Author alloc] init];
[author setValue:@"Zhan" forKey:@"name"];
[book setValue:author forKey:@"author"]; NSString *authorName = [book valueForKeyPath:@"author.name"];
NSLog(@">> %@",authorName); [book setValue:@"" forKey:@"price"];
NSLog(@">> %@",[book valueForKey:@"price"]); Book *book1 = [[Book alloc] init];
[book1 setValue:@"" forKey:@"price"];
Book *book2 = [[Book alloc] init];
[book2 setValue:@"" forKey:@"price"]; NSArray *books = [NSArray arrayWithObjects:book1,book2,nil];
[book setValue:books forKey:@"relativeBooks"];
NSLog(@">>%@",[book valueForKeyPath:@"relativeBooks.price"]);
KVO是基于kvc实现的,采取的是观察者的模式:
book4=[[Book alloc] init];
//增加观察者,为本类,keypath为book中的price对象,所以为price
[book4 addObserver:self forKeyPath:@"price" options:NSKeyValueObservingOptionOld|NSKeyValueObservingOptionNew context:nil];
//修改值
[book4 setValue:@"" forKey:@"price"];
//回掉方法,只要book4的值一改变就会回调这个方法
-(void) observeValueForKeyPath:(NSString *)keyPath
ofObject:(id)object
change:(NSDictionary *)change
context:(void *)context{
NSLog(@"cel back");
if([keyPath isEqual:@"price"]){
NSLog(@">>>>>>>price is changed");
NSLog(@"old price is %@",[change objectForKey:@"old"]);
NSLog(@"new price is %@",[change objectForKey:@"new"]);
}
}
KVO与KVC的使用(转)的更多相关文章
- iOS开发——实用篇&KVO与KVC详解
KVO与KVC详解 由于ObjC主要基于Smalltalk进行设计,因此它有很多类似于Ruby.Python的动态特性,例如动态类型.动态加载.动态绑定等.今天我们着重介绍ObjC中的键值编码(KVC ...
- UI:KVO、KVC
什么是KVC 什么是 KVO ? KVC:(NSKey ValueCoding)”键-值 编码“是一种间接的访问对象属性(字符串表征)的机制.对象的属性都可以通过使用KVC机制用相同的方式访问.我们 ...
- iOS之KVO和KVC
概述 由于ObjC主要基于Smalltalk进行设计,因此它有很多类似于Ruby.Python的动态特性,例如动态类型.动态加载.动态绑定等.今天我们着重介绍ObjC中的键值编码(KVC).键值监听( ...
- ios专题 -KVO , KVC
KVO,即:Key-Value Observing,它提供一种机制,当指定的对象的属性被修改后,则对象就会接受到通知. addObserver: forKeyPath: options: conte ...
- KVO与KVC初步了解
参考: http://magicalboy.com/kvc_and_kvo/ http://www.mamicode.com/info-detail-515516.html KVC,即是指 NSKey ...
- iOS监听模式之KVO、KVC的高阶应用
KVC, KVO作为一种魔法贯穿日常Cocoa开发,笔者原先是准备写一篇对其的全面总结,可网络上对其的表面介绍已经够多了,除去基本层面的使用,笔者跟大家谈下平常在网络上没有提及的KVC, KVO进阶知 ...
- KVO And KVC
http://www.cocoachina.com/industry/20140224/7866.html
- iOS - 详细理解KVC与KVO
详细理解KVC与KVO 在面试的时候,KVC与KVO有些时候还是会问到的,并且他们都是Objective C的关键概念,在这里我们先做一个简单地介绍: (一)KVC: KVC即指:NSKeyValue ...
- KVO/KVC 实现机理分析
来源:http://blog.csdn.net/dqjyong/article/details/7672865 Objective-C里面的Key-Value Observing (KVO)机制,非常 ...
随机推荐
- 【WEB HTTP】集成点:网关、隧道及中继
网关:网关可以作为某种翻译器使用,它抽象出了一种能够到达资源的方法.网关是资源与应用程序之间的粘合剂. 在不同http版本之间进行转换的Web代理和网关一样,他们会执行复杂的逻辑,以便在各个端点之间进 ...
- JAVA & C++ 多态
多态,也叫动态绑定. Java: class A { public void f1() { System.out.println("A:f1"); } public void f2 ...
- iOS NSSet 学习 “无序数组” & 去重 案例
“NSSet,NSMutableSet,和NSCountedSet类声明编程接口对象的无序集合(散列存储:在内存中的存储位置不连续). 而NSArray,NSDictionary类声明编程接口对象的有 ...
- 所有文本的 attributes 枚举,NSAttributedString
// Predefined character attributes for text. If the key is not in the dictionary, then use the defau ...
- 树莓派打造对话机器人 Python(转)
工具列表 1. **树莓派**(型号不要求,本人使用的是3B) 2. **usb麦克风**(某宝有卖,我就不打广告了) 用来录音 3. **音响或者喇叭**(某宝也有卖) 用来播放 以上就是需要的工具 ...
- Linux的XServer
Moblin Core是在Gnome Mobile的平台上建立.我以前玩Linux,提交的都和图像没有关系,连Xwindows都不用启动,开机后直接进入文本命令行,所以这方面了解得很少,需要学习一下, ...
- CSS3手风琴下拉菜单
在线演示 本地下载
- 自定义美化UL OL发光列表
在线演示 本地下载
- Java基础面试集合
1.面向对象的特征有哪些方面? 抽象 封装 继承 多态,多态性是指允许不同子类型的对象对同一消息作出不同的响应.简单的说就是用同样的对象引用调用同样的方法但是做了不同的事情.多态性分为编译时的多态性和 ...
- photoshop cs5 序列号永久序列号永久激活破解方法
photoshop cs5 序列号永久序列号永久激活破解方法 (2016-12-10 07:52:21) 转载▼ 标签: it PhotoShop CS5 /ps5 序列号激活码 1330-15 ...