KVC和KVO
来源:互联网 发布:java四大特性 编辑:程序博客网 时间:2024/06/08 08:17
- (void)testKvc
{
// key value coding : 间接通过字符串类型的key取出对应的属性值
// KVC的价值
// 1.可以访问私有成员变量的值
// 2.可以间接修改私有成员变量的值(替换系统自带的导航栏、tabbar)
HMPerson *p = [[HMPerson alloc] init];
// p.age = 20;
// NSLog(@"年龄=%d", p.age);
// NSLog(@"年龄=%d", [p age]);
// int age = [[p valueForKey:@"age"] intValue];
// NSLog(@"年龄=%d", age);
// NSLog(@"%f", [[p valueForKey:@"height"] floatValue]);
// float h1 = [[p valueForKey:@"height"] floatValue];
// float h2 = [[p valueForKeyPath:@"height"] floatValue];
// NSLog(@"%f %f", h1, h2);
// p.dog = [[HMDog alloc] init];
// p.dog.name = @"wangcai";
// NSLog(@"%@", [p valueForKeyPath:@"dog.name"]);
// keyPath包含了key的功能
// key:只能访问当前对象的属性
// keyPath:能利用.运算符一层一层往内部访问属性
HMBook *b1 = [[HMBook alloc] init];
b1.name = @"kuihua";
b1.price = 100.6;
HMBook *b2 = [[HMBook alloc] init];
b2.name = @"pixie";
b2.price = 5.6;
HMBook *b3 = [[HMBook alloc] init];
b3.name = @"jiuyin";
b3.price = 50.6;
p.books = @[b1, b2, b3];
// NSLog(@"%@", [p valueForKeyPath:@"books.@count"]); // 计算数组的长度
// NSArray *names = [p valueForKeyPath:@"books.name"];
// NSArray *names = [p.books valueForKeyPath:@"name"];
// NSLog(@"%@", names);
double sumPrice = [[p valueForKeyPath:@"books.@sum.price"] doubleValue];
NSLog(@"%f", sumPrice);
}
- (void)testKvo
{
HMPerson *p = [[HMPerson alloc] init];
p.age = 20;
[p addObserver:self forKeyPath:@"age" options:NSKeyValueObservingOptionOld | NSKeyValueObservingOptionNew context:nil];
p.age = 30;
p.age = 40;
self.p = p;
}
- (void)dealloc
{
[self.p removeObserver:self forKeyPath:@"age"];
}
- (void)settingImage:(UIImage *)image
{
}
/**
* 当监控的某个属性的值改变了就会调用
*
* @param keyPath 属性名(哪个属性改了?)
* @param object 哪个对象的属性被改了?
* @param change 属性的修改情况(属性原来的值、属性最新的值)
* @param context void * == id
*/
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
NSLog(@"%@对象的%@属性改变了:%@", object, keyPath, change);
}
{
// key value coding : 间接通过字符串类型的key取出对应的属性值
// KVC的价值
// 1.可以访问私有成员变量的值
// 2.可以间接修改私有成员变量的值(替换系统自带的导航栏、tabbar)
HMPerson *p = [[HMPerson alloc] init];
// p.age = 20;
// NSLog(@"年龄=%d", p.age);
// NSLog(@"年龄=%d", [p age]);
// int age = [[p valueForKey:@"age"] intValue];
// NSLog(@"年龄=%d", age);
// NSLog(@"%f", [[p valueForKey:@"height"] floatValue]);
// float h1 = [[p valueForKey:@"height"] floatValue];
// float h2 = [[p valueForKeyPath:@"height"] floatValue];
// NSLog(@"%f %f", h1, h2);
// p.dog = [[HMDog alloc] init];
// p.dog.name = @"wangcai";
// NSLog(@"%@", [p valueForKeyPath:@"dog.name"]);
// keyPath包含了key的功能
// key:只能访问当前对象的属性
// keyPath:能利用.运算符一层一层往内部访问属性
HMBook *b1 = [[HMBook alloc] init];
b1.name = @"kuihua";
b1.price = 100.6;
HMBook *b2 = [[HMBook alloc] init];
b2.name = @"pixie";
b2.price = 5.6;
HMBook *b3 = [[HMBook alloc] init];
b3.name = @"jiuyin";
b3.price = 50.6;
p.books = @[b1, b2, b3];
// NSLog(@"%@", [p valueForKeyPath:@"books.@count"]); // 计算数组的长度
// NSArray *names = [p valueForKeyPath:@"books.name"];
// NSArray *names = [p.books valueForKeyPath:@"name"];
// NSLog(@"%@", names);
double sumPrice = [[p valueForKeyPath:@"books.@sum.price"] doubleValue];
NSLog(@"%f", sumPrice);
}
- (void)testKvo
{
HMPerson *p = [[HMPerson alloc] init];
p.age = 20;
[p addObserver:self forKeyPath:@"age" options:NSKeyValueObservingOptionOld | NSKeyValueObservingOptionNew context:nil];
p.age = 30;
p.age = 40;
self.p = p;
}
- (void)dealloc
{
[self.p removeObserver:self forKeyPath:@"age"];
}
- (void)settingImage:(UIImage *)image
{
}
/**
* 当监控的某个属性的值改变了就会调用
*
* @param keyPath 属性名(哪个属性改了?)
* @param object 哪个对象的属性被改了?
* @param change 属性的修改情况(属性原来的值、属性最新的值)
* @param context void * == id
*/
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
NSLog(@"%@对象的%@属性改变了:%@", object, keyPath, change);
}
0 0
- kvo 和kvc
- KVO和KVC
- KVC和KVO简介
- kvo和kvc
- Iphone 和 KVC/KVO
- kvc和kvo
- KVC和KVO
- KVC、KVO和谓词
- KVC和KVO
- KVO和KVC
- KVC 和KVO机制
- KVO和KVC
- KVC 和 KVO
- KVC和KVO
- ios kvc和kvo
- KVC和KVO
- KVC、KVO和谓词
- KVC 和 KVO
- 开源项目Egg简介
- Java自定义泛型类和泛型方法
- 九度OJ 题目1087:约数的个数
- 首款企业应急响应中心开发框架 – SRCMS·轻响应
- 配置hadoop伪分布式继续
- KVC和KVO
- 核心动画——基础动画
- 6)Win10-UWA开发 应用生命周期
- Java练习题2
- MySQL触发器入门
- 操作系统 - 死锁(Deadlock)的概述、条件、对策
- 例题 7-5 困难的串 UVa129
- 九度OJ 题目1088:剩下的树
- Java学习笔记----容器