【iOS】KVC 与 KVO
KVC被称为iOS开发平台的大招!!! 能快速修改对象属性。
三、KVO的使用方式
//
// XNViewController.m
// KVC----KVO
//
// Created by neng on 14-6-21.
// Copyright (c) 2014年 neng. All rights reserved.
//#import "XNViewController.h"
#import "XNPerson.h"
#import "XNStudent.h"
#import "XNBook.h"@interface XNViewController ()@end
/*** KVC: Key Value Coding(键值编码)* 间接修改/获取对象的属性, 降低类与类之间的耦合度.* KVO: Key Value Observer(键值观察)KVO通常用于观察”对象的某个属性“发生变化时,及时做出响应!而NSNotificationCenter是需要POST"通知字符串"(表示监听的事件类型)的对象存在,通知中心才能够工作!*/@implementation XNViewController- (void)viewDidLoad {[super viewDidLoad];//1.简单的修改对象属性[self kvcDemo1];//2.对于子类, 也能直接修改[self kvcDemo2];//3.修改对象的book属性. (相当麻烦, 好要创建book对象).KVC一句话[self kvcDemo3];//4.获取对象的属性值. 可批量获取(如果是数组的话).[self kvcDemo4];//KVO 演示[self kvoDemo];
}- (void)kvoDemo {XNStudent *stu = [[XNStudent alloc] init];stu.name = @"xuneng";//设置监听对象//1》 负责观察的对象 self//2》 观察的键值路径//3》 观察的选项//4》 上下文:通常用于区分不同的观察事件[stu addObserver:self forKeyPath:@"name" options:NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld context:@"myObserver"];stu.name = @"neng"; //修改//所有观察者模式的性能都不好, 需要及时移除[stu removeObserver:self forKeyPath:@"name"];stu.name = @"xu"; //移除后再次修改
}/**当KVO指定的对象键值发生改变时, 会自动调用该方法name: 观察的键值object: 观察的对象change: 修改的字典(新旧数值)context: 指定观察者时传入的上下文*/
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {NSLog(@"|-- %@ --|-- %@ --|-- %@ --|-- %@--|", keyPath, object, change, context);
}/***简单的修改对象属性*/
- (void)kvcDemo1 {//1.原始的方式. 点语法修改对象属性的值XNPerson *p1 = [[XNPerson alloc] init];p1.name = @"xuneng";p1.age = 24;// NSLog(@"%@ , %d",p1.name,p1.age);NSLog(@"KVC1 demo1--> %@", p1); //这样直接调用description方法.//2.KVC来修改[p1 setValue:@"xxxx" forKeyPath:@"name"];[p1 setValue:@"10" forKeyPath:@"age"];NSLog(@"KVC2 demo1--> %@ , %d", p1.name, p1.age);
}/***对于子类, 也能直接改*/
- (void)kvcDemo2 {//1.传统方法XNStudent *p1 = [[XNStudent alloc] init]; //学生p1.name = @"student xuneng";p1.age = 22;// NSLog(@"%@ , %d",p1.name,p1.age);NSLog(@"KVC1 demo2--> %@", p1); //这样直接调用description方法.//2.KVC来修改子类[p1 setValue:@"xxxx" forKeyPath:@"name"];[p1 setValue:@"10" forKeyPath:@"age"];NSLog(@"KVC2 demo2--> %@ , %d", p1.name, p1.age);
}/***修改对象的book属性. (相当麻烦, 好要创建book对象).KVC一句话*/
- (void)kvcDemo3 {//1.传统方法XNStudent *p1 = [[XNStudent alloc] init]; //学生p1.name = @"student xuneng";p1.age = 22;XNBook *myBook = [[XNBook alloc] init];myBook.bookName = @"iOS";p1.book = myBook;NSLog(@"KVC1 demo3--> %@", p1);//2.KVC的方法[p1 setValue:@"iPhone" forKeyPath:@"book.bookName"]; //学生里的book,book里的bookNameNSLog(@"KVC2 demo3--> %@", p1);
}/***获取对象的属性值. 可批量获取(如果是数组的话).*/
- (void)kvcDemo4 {XNStudent *p1 = [[XNStudent alloc] init]; //学生1p1.name = @"student1 xuneng";p1.age = 24;XNBook *myBook1 = [[XNBook alloc] init];myBook1.bookName = @"iOS";p1.book = myBook1;XNStudent *p2 = [[XNStudent alloc] init]; //学生2p2.name = @"student2 xuneng";p2.age = 23;XNBook *myBook2 = [[XNBook alloc] init];myBook2.bookName = @"iPhone";p2.book = myBook2;NSArray *arr = @[p1, p2];//1.普通方法获取数组中对象的属性NSMutableArray *arrBook = [[NSMutableArray alloc] init];for (XNStudent *stu in arr) {[arrBook addObject:stu.book.bookName];}NSLog(@"KVC1 demo4--> %@", arrBook);//2.KVC方法来获取数组中对象NSLog(@"KVC2 demo4--> %@", [arr valueForKeyPath:@"book.bookName"]);
}@end
例子源码下载:http://download.csdn.net/detail/xn4545945/7571719
转载请注明出处:http://blog.csdn.net/xn4545945
【iOS】KVC 与 KVO相关推荐
- iOS KVC和KVO
一. KVC KVC也就是key-value-coding,即键值编码,最常见的两种用法就是: 1). 对私有变量进行赋值,同样的也可以通过它进行取值 对某一个属性进行赋值,可以不用加下划线,它的查找 ...
- iOS KVC和KVO简介
kvc KVC,即是指 NSKeyValueCoding,一个非正式的 Protocol,它是一种可以直接通过字符串的名字(key)来访问类属性的机制(一种间接访问对象的属性的机制). 常见的 获取值 ...
- iOS 中KVC、KVO、NSNotification、delegate 总结及区别
iOS 中KVC.KVO.NSNotification.delegate 总结及区别 1.KVC,即是指 NSKeyValueCoding,一个非正式的Protocol,提供一种机制来间接访问对象的属 ...
- Ios KVC KVO
一.KVC与KVO *"KVC":key value Coding(键值编码) *目的:间接的修改或获取对象的属性,降低程序(类与类)之间的耦合度. *"KVO" ...
- ios 通过kvc修改属性会触发kvo_iOS开发-KVC和KVO的理解
KVC和KVO看起来很专业,其实用起来还是比较简单的,KVC(Key-value coding)可以理解为键值对编码,如果对象的基本类型,那么键值对编码实际上和get,set方法没有区别,如果是属性是 ...
- 【iOS】—— KVC与KVO
KVC与KVO 一.KVC 1.简单介绍 2.常见的API 3.key和keyPath的区别 4.KVC原理 4.1 `setValue:forKey: `的原理(KVC赋值原理) 4.2 `valu ...
- ios中的KVC和KVO
最近研究了一下子KVC和KVO,KVC:即Key-Value-Coding 而KVO:即Key-Value-Observer KVC是针对NSObject的子类,因为它的实现是由于其括展类NSObje ...
- Objective-C中的KVC与KVO(上)
本文转载 李朴之先生博客 http://blog.csdn.net/pucker/article/details/7413280 Objective-C中的KVC与KVO是两种比较重要的技术,这里简要 ...
- apple开发者文档关于KVC和KVO文档的一些渣翻——这里是原地址
apple开发者文档关于KVC和KVO文档的一些渣翻--这里是原地址 Key-Value Coding Programming Guide KVC编程介绍 介绍 本文档用来描述NSKeyValueCo ...
最新文章
- 《Linux命令详解手册》——Linux畅销书作家又一力作
- JUC多线程核心知识-思维导图
- 14条建议,使你的IT职业生涯更上一层楼
- javascript中break和continue
- STM32开发 -- PMIC、I2C详解
- IDEA创建springboot项目:Unable to import maven project: See logs for details
- html高德地图api使用教程,高德地图API如何使用?
- 【UOJ574】多线程计算【二元二项式反演】【定积分】【矩阵】【NTT 卷积】
- ElasticSearch(笔记)
- java中将数字颠倒的工具类,java开发中常用的数字工具类
- 位图(bitmap)—— C语言实现
- 【FPGA】TestBench中关于@eachvec
- android api (82) —— InputConnection [输入法]
- 装载list的时候 一定要把每一个实体放到for里面
- python多线程刷网站流量(含ip代理池文档,可制作成exe文件挂服务器代刷)
- Kubernetes监控体系(1)-cAdvisor介绍
- mysql简历上怎么写_新手程序员简历应该怎么写?
- 《21天学通HTML+CSS+JavaScript Web开发(第7版)》——2.4 您要在Web上做什么
- 传奇GEE引擎版本如何封挂?GEE引擎设置简单的封挂脚本教程
- ssh开启图形界面_【工具大道】ssh登录Linux服务器,并显示图形化界面
热门文章
- python中a* b是什么意思_Python中a-=b与a=a-b的区别是什么?
- Hadoop1000条笔记总汇
- 防华为手表太空人主题界面 | html5 代码实现
- python培训学校哪儿好_昆山学习python哪儿好
- 公司金融课程知识点记录(一) 第二、三章节——斯坦利·布洛克编著教科书
- 你离英文的技术文档大神,只差这个中英文对照!
- (失败记录)用CMD加密文件夹
- 3天3连板,你敢想吗?太牛了!
- word2003中,格式刷有快捷键吗
- 最强黑客组织“匿名者”常用安全渗透软件