您的位置:首页 > 移动开发 > IOS开发

iOS:KVC的概述与使用

2015-04-29 22:33 246 查看
@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),我们需要对数据进行封装.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: