IOS开发之KVC与KVO简述
KVC:Key-Value Coding
KVO:Key-Value Observing
Person.m
#import <Foundation/Foundation.h>
@interface Person : NSObject{
//该访问修饰符用于说明即使私有成员变量也可以通过kvc方式访问和赋值
@private
NSString *_name;
NSArray *_dogs;
}
@end
@implementation Person
@end
Dog.m
#import <Foundation/Foundation.h> @class Person; @interface Dog : NSObject
{
@private
NSInteger _age;
Person *_owner;
}
@end @implementation Dog
@end
PersonObserve.m
#import <Foundation/Foundation.h>
#import "Person.h" @interface PersonObserve : NSObject
@end @implementation PersonObserve
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context{
Person *p = (Person *)object;
//使用kvc方式获取成员变量keypath的值
NSLog(@"%@",[p valueForKey:keyPath]);
}
@end
main.m
#import <Foundation/Foundation.h>
#import "Person.h"
#import "PersonObserve.h"
#import "Dog.h" int main(int argc, const char * argv[]) {
//观察者类
PersonObserve *po = [[PersonObserve alloc] init];
Person *p = [[Person alloc] init];
//使用kvo方式对成员变量“name”的属性值变化增加观察者po
//po将在该属性值发生变化时执行- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context方法
[p addObserver:po forKeyPath:@"name" options:NSKeyValueObservingOptionNew context:nil]; //通过kvc方式设置成员变量“name”的属性值
//触发观察者执行对应方法
[p setValue:@"zhangsan" forKey:@"name"]; //kvc中forKeyPath的用法
Dog *d = [[Dog alloc] init];
[d setValue:p forKey:@"owner"];
[d setValue:@"lisi" forKeyPath:@"owner.name"]; //移除对私有成员变量“name”的观察
[p removeObserver:po forKeyPath:@"name"]; Dog *d1 = [[Dog alloc] init];
[d1 setValue:@ forKey:@"age"];
Dog *d2 = [[Dog alloc] init];
[d2 setValue:@ forKey:@"age"]; NSArray *array = [NSArray arrayWithObjects:d1,d2, nil];
[p setValue:array forKey:@"dogs"]; //kvc中valueForKeyPath数组内置表达式的用法
NSLog(@"dogs.age = %@",[p valueForKeyPath:@"dogs.age"]);
NSLog(@"dogs.age.sum = %@",[p valueForKeyPath:@"dogs.@sum.age"]);//dogs数组中age的总和
NSLog(@"dogs.age.avg = %@",[p valueForKeyPath:@"dogs.@avg.age"]);//dogs数组中age的平均值
NSLog(@"dogs.age.max = %@",[p valueForKeyPath:@"dogs.@max.age"]);//dogs数组中age的最大值
NSLog(@"dogs.age.min = %@",[p valueForKeyPath:@"dogs.@min.age"]);//dogs数组中age的最小值 return ;
}
结果:
-- ::34.611 KVC&KOC[:] zhangsan
-- ::34.612 KVC&KOC[:] lisi
-- ::34.613 KVC&KOC[:] dogs.age = (
, )
-- ::34.613 KVC&KOC[:] dogs.age.sum =
-- ::34.613 KVC&KOC[:] dogs.age.avg =
-- ::34.613 KVC&KOC[:] dogs.age.max =
-- ::34.613 KVC&KOC[:] dogs.age.min =
Program ended with exit code:
IOS开发之KVC与KVO简述的更多相关文章
- IOS开发之KVC KVO KVB
KVC(Key Value Coding) KVO(Key Value Observing) KVB(Key Value Binding) KVO是Cocoa的一个重要机制,他提供了观察某一属性变化的 ...
- iOS开发之KVC全解
一 KVC的基本概念 1.KVC是Key Value Coding的缩写,意思是键值编码. 在iOS中,提供了一种方法通过使用属性的名称(也就是Key)来间接访问对象属性的方法,这个方法可以不通过g ...
- iOS开发之KVC
1.KVC概述 KVC(Key-value coding)是一套利用字符串标识符间接访问对象属性和关系的机制.Cocoa Programming中,Core Data,Application Scri ...
- iOS 开发之 KVC - setValuesForKeysWithDictionary 解析
从字典映射到一个对象,这是KVC中的一个方法所提供的,这个方法就是 setValuesForKeysWithDictionary:,非常好用,不需要你来一一的给对象赋值而直接从字典初始化即可,但用的不 ...
- iOS中关于KVC与KVO知识点
iOS中关于KVC与KVO知识点 iOS中关于KVC与KVO知识点 一.简介 KVC/KVO是观察者模式的一种实现,在Cocoa中是以被万物之源NSObject类实现的NSKeyValueCodin ...
- 李洪强iOS开发之iOS社区收集
李洪强iOS开发之iOS社区收集 项目 简述 github 全球最大的代码仓库,无论是iOS开发还是Android开发没有人不知道这个网站,它也是一个社区,你可以去follow(关注)某些人或公司. ...
- 李洪强iOS开发之iOS工具收集
李洪强iOS开发之iOS工具收集 项目 简述 日期 我是怎么慢慢变懒的 : Jenkins + 蒲公英 使用Jenkins + 蒲公英使得项目打包给测试人员自动化,大大节省了劳动力 2015.04.1 ...
- 李洪强iOS开发之iOS学习方法收集
李洪强iOS开发之iOS学习方法收集 在这里收集一些iOS学习方法,会不断更新 项目 简述 日期 一年多iOS开发总结 作者总结了自己一年多的iOS学习经验,对于iOS初学者来说很多地方是可以借鉴的 ...
- 李洪强iOS开发之iOS好文章收集
李洪强iOS开发之iOS好文章收集 该文收集朋友们转发或自己的写的技术文章,如果你也有相关的好文章,欢迎留言,当好文章多的时候,我会对这些好文章进行分门别类 文章 简述 日期 直播服务配置 使用 ng ...
随机推荐
- java 异常架构图
cu 红色为检查异常,就是eclipse要提示你是try catch 还是throws. 非检查异常,就是/0,nullpointexception,数据越界访问indexOfOutBounds 异常 ...
- ACM2028
Lowest Common Multiple Plus Problem Description 求n个数的最小公倍数. input 输入包含多个测试实例,每个测试实例的开始是一个正整数n,然后是n ...
- 杭电HDOJ--ACM1002(JAVA解题,运用BigInteger)(自定义MBigInteger 简单实现大数处理----完善后可以实现百亿计算器)
转载声明:原文转自http://www.cnblogs.com/xiezie/p/5501901.html JAVA解题: import java.util.*; import java. ...
- iOS开发中常见的语句@synthesize obj = _obj 的意义详解
我们在进行iOS开发时,经常会在类的声明部分看见类似于@synthesize window=_window; 的语句,那么,这个window是什么,_ window又是什么,两个东西分别怎么用,这是一 ...
- WeUI首页、文档和下载 - 专为微信设计的 UI 库 - 开源中国社区
Download Bitnami Review Board Stack click here WeUI首页.文档和下载 - 专为微信设计的 UI 库 - 开源中国社区
- 在C#中生成唯一的字符串和数字【GUID】转
转自:http://www.cnblogs.com/lcwzj/archive/2009/04/16/1436992.html 当我们想要获得一个唯一的key的时候,通常会想到GUID.这个key非常 ...
- MySql中启用InnoDB数据引擎的方法
1.存储引擎是什么? Mysql中的数据用各种不同的技术存储在文件(或者内存)中.这些技术中的每一种技术都使用不同的存储机制.索引技巧.锁定水平并且最终提供广泛的不同的功能和能力.通过选择不同的技术, ...
- local storage 简单应用‘’记住密码’
前些时候一直用cookie等来进行登录页面记住面膜操作,但是由于其存储容量小等缘故,所以后来转向local storage,原理为:当用户勾选记住密码时,local storage 存储用户名密码同时 ...
- ubuntu压缩解压
ubuntu安装解压rar 一般通过默认安装的ubuntu是不能解压rar文件的,只有在安装了rar解压工具之后,才可以解压.其实在ubuntu下安装rar解压工具是非常简单的,只需要两个步骤就可 ...
- 生成N个不相等的随机数
近期项目中须要生成N个不相等的随机数.实现的时候.赶工期,又有项目中N非常小(0-100)直接谢了一个最直观的方法: public static List<Integer> randomS ...