iOS:KVC的概述与使用

@interface Student : Person
{
    NSString * _name;
    Phone * _phone;
}
@end
@implementation Student
@end

@interface Phone : NSObject
{
    NSString * _brand;
    CGFloat _price;
}
@end
@implementation Phone
@end

Student * stu = [[Student alloc] init];
[stu setValue:@"张三" forKey:@"name"];

NSLog(@"%@",[stu valueForKey:@"name"]);
        
        
Phone * aPhone = [[Phone alloc] init];
[stu setValue:aPhone forKey:@"phone"];
 NSLog(@"phone = %@",[stu valueForKey:@"phone"]);
        
[stu setValue:@"苹果" forKeyPath:@"phone.brand"];
NSLog(@"phone.brand = %@",[stu valueForKeyPath:@"phone.brand"]);

      KVC  键-值-编码  key-value-coding   KVC是一种间接访问对象属性的机制,使用该机制不需要调用存取方法和变量实例就可以访问对象属性.

KVC的基本用法:

键/值编码中的基本调用包括 -valueForKey:  和 -setValue: forKey: 这两个方法,它们以字符串的形式向对象发送消息,字符串是我们关注属性的关键.

赋值规律:

1,先找有没有和key同名的实例变量,有的就赋值

2,没有的话再找和实例变量同名加_的实例变量

3,如果还没有自动调用-setValue: forUndefinedKey:

取值规律:

1,先找有没有和key同名的实例变量,有的话就赋值

2,没有的话再找和实例变量同名加_的实例变量

3,如果还没有自动调用valueForUndefinedKey:

键路径访问属性

如果访问这个类的属性的属性,就要用到键路径.     我们可以通过 setValue: forKeyPath: 来给属性的属性赋值  通过valueForKeyPath取值 

例:(注意加粗部分书写)

[stu setValue:@"苹果" forKeyPath:@"phone.brand"];
[stu valueForKeyPath:@"phone.brand"]

路径必须是:  属性名1 . 属性名2  


这里我们需要注意,当我们通过setValue: forKey: 设置对象的值,或通过valueForKey来获取对象的值时,如若对象的实例变量为基本数据类型时(char ,int, float, BOOL),我们需要对数据进行封装.

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值