您的位置:首页 > 其它

KVC键值对

2016-02-16 16:35 239 查看
//Key Value Coding(简称:KVC)中文含义:键值编码

//KVC利用字符串动态控制一个对象,操作方法由NSValueCoding协议提供,在NSObject中实现了该协议,所以在所有继承自NSObject中所有的对象都支持KVC操作

//常用属性有:

//1、动态设置

//setValue:<#(nullable id)#> forKey:<#(nonnull NSString *)#>用于简单路径(直接可以找到类的)

//setValue:<#(nullable id)#> forKeyPath:<#(nonnull NSString *)#>用于复合路径(类中包含类)

//2、动态读取

//valueForKey:<#(nonnull NSString *)#>

//valueForKeyPath:<#(nonnull NSString *)#>

//PS:参数说明:KEY值就是属性的名称

//KVC进行读取的查找规则:(查找过程中无论属性或方法是公有的还是私有的都是能正确读设)

//1、首先查找get/set方法(不存在进行下面的查找)

//2、”_”查找带下划线的实例变量(不存在进行下面的查找)

//3、直接查找不带下划线的实例变量(最后还是没有找到,进行下面的杀手锏)

//4、设置会调用:setValue:forUndefinedKey:

//or

//读取或调用:valueforUndefinedKey:

Demo:

Account类只是为了点明符合路径的使用

Account.h

#import <Foundation/Foundation.h>

@interface Account :
NSObject

#pragma mark-属性

#pragma mark-余额

@property (nonatomic,assign)float balance;

@end

Account.m

#import "Account.h"

@implementation Account

@end

Person.h

#import <Foundation/Foundation.h>

@class Account;

@interface Person :
NSObject{

@private int _age;

}

#pragma mark-属性

#pragma mark 姓名

@property (nonatomic,copy)NSString *name;

#pragma mark 账户

@property (nonatomic,strong)Account *account;

#pragma mark-公共方法

#pragma mark 显示人员信息

- (void)showMessage;

@end

Person.m

#import "Person.h"

@implementation Person

#pragma mark - 公共方法

#pragma mark 显示人员信息

- (void)showMessage

{

NSLog(@"name = %@,age = %d",_name,_age);

}

@end

KVC验证

Person *person1 = [[Personalloc]
init];

[person1 setValue:@"why"forKey:@"name"];

[person1 setValue:@22forKey:@"age"];

[person1 showMessage];

NSLog(@"person1姓名:%@,年龄:%@",person1.name,[person1valueForKey:@"age"]);

Account *account1 = [Accountnew];

person1.account = account1;

[person1 setValue:@100000000.0forKeyPath:@"account.balance"];

NSLog(@"person1存款余额:%.2f",[[person1valueForKeyPath:@"account.balance"]floatValue]);

//使用KVC数组计算,无需循环
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: