博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
KVC与KVO
阅读量:5026 次
发布时间:2019-06-12

本文共 1851 字,大约阅读时间需要 6 分钟。

1.KVC

KVC--Key-Value-Coding   可以直接通过字符串的名字(key)来访问类属性(实例变量)的机制,不用调用setter、getter方法访问,当使用KVO,CoreData,CocaaBindings,AppleScript(Mac支持)时,KVC是关键技术。

Person *xw = [[Person alloc ]init];

//使用kvc设置成员变量的值

//使用之前必须知道变量的名

[xw setValue:@"xiaowang"forKey:@"name"];  -----------name必须是变量的名不能有一点差别

NSString *name = [xw valueForKey:@"name"];-------读取Key的值

NSLog(@"%@",name);

 

//设置对象里的某个类的某个属性 确定类的对象一定是存在的

Dog *dog = [[Dog alloc]init];-------要先有dog的对象

[xw setValue:dg forKey:@"dg"];

[xw setValue:@"wangwang"forKeyPath:@"dg.dogName"];

NSString *dgname = [xw valueForKeyPath:@"dg.dogName"];

NSLog(@"%@",dgname);

 

2.KVO

KVO:Key-Value-Observing,提供一种机制,当指定的对象的属性被修改后,则对象就会接收到通知,简单的说就是每次指定的被观察对象的属性被修改后,KVO就会自动通知相应 的观察者;

系统框架已经支持KVO,所以程序员在使用的时候非常简单。

1,注册,指定被观察者的属性

2,实现回调方法

3.移除观察

cread.h中定义int money;

Person.h中定义cread *card;

Person.m中实现

-(instancetype)init{

if(self = [super init]){

self.card = [[[Creat alloc]init]autorelease];

//添加监听器,监听cread中money的变化之前和之后的值

[self addOberve:self forKeyPath:@"cread.money" options:NSKeyObservingOptionOld|NSKeyObservingOptionNew context:nil];

}

return self;

}

//回调

-(void)obseveValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSString *,id>*)change context:(void*)context{

int oldValue = [[change objectForKey:NSKey:NSKeyValueChangeOldKey] intValue];

int newValue = [[change objectForKey:NSKey:NSKeyValueChangeNewKey]intValue];

NSLog(@"old:%d",[[change objectForKey:NSKeyValueVhangeOldKey]initValue]);

NSLog(@"new:%d",[[change objectForKey:NSKeyValueChangeNewKey]initValue]);

}

//销毁

-(void)dealloc{

[_cread  realease];

[self removeObserver:self forKeyPath:@"cread.money"];

[super dealloc];

}

main.m实现

Person *xw = [[[Person alloc]init]autorelease];

[xw setValue:@1000 forKeyPath:@"cread.money"];

[xw setValue:@2000 forKeypath:@"cread.money"];

}

return 0 ;

}

转载于:https://www.cnblogs.com/yangqinglong/p/5154728.html

你可能感兴趣的文章
随机森林(Random Forest)
查看>>
SQL数据库约束
查看>>
当今世界最为经典的十大算法--投票进行时
查看>>
SpringMVC(十六) 处理模型数据之SessionAttributes
查看>>
阅读笔记01
查看>>
mysql设置有外键的主键自增及其他
查看>>
laravel常用函数大全Helper
查看>>
poj2299 Ultra-QuickSort
查看>>
第三部分shell编程3(shell脚本2)
查看>>
一个基于jQuery的移动端条件选择查询插件(原创)
查看>>
C# Winform 自适应
查看>>
IE阻止个别AC插件的原因及解决办法
查看>>
网络编程原始套接字
查看>>
Centos下源码安装git
查看>>
gulp-rev-append md5版本号
查看>>
IO流之File类
查看>>
sql 基础语句
查看>>
CF717A Festival Organization(第一类斯特林数,斐波那契数列)
查看>>
oracle直接读写ms sqlserver数据库(二)配置透明网关
查看>>
控件发布:div2dropdownlist(div模拟dropdownlist控件)
查看>>