开发环境:xcode7
一.KVC概述
1.KVC是KeyValueCoding的简称,它是一种可以直接通过类属性的名字来作key,再绑定key的值来访问类属性的机制,而不再通过利用@property提供的setter和getter方法来访问;
2.KVC支持类对象和内建的基本数据类型;
3.KVC的关键方法定义在NSKeyValueCoding.h文件里,常用的方法:
修改值:
- (void)setValue:(nullable id)value forKey:(NSString *)key;
- (void)setValue:(nullable id)value forKeyPath:(NSString *)keyPath;
获取值:
- (nullable id)valueForKey:(NSString *)key;
- (nullable id)valueForKeyPath:(NSString *)keyPath;
二.演示
1.新建一个工程
2.新建一个类Person类
Persion.h里为Person类添加姓名和年龄字段,不用@property处理为属性,提供setter和getter方法
#import <Foundation/Foundation.h> @interface Person : NSObject { NSString *name; int age; } @end
Person.m默认即可,不做任何添加
#import "Person.h" @implementation Person @end
3.在main.m文件中利用KVC,我们来实现对Person类中name和age实例变量的访问
#import <Foundation/Foundation.h> #import "Person.h" int main(int argc, const char * argv[]) { @autoreleasepool { Person *person = [[Person alloc] init]; [person setValue:@"damon" forKey:@"name"]; [person setValue:@"20" forKey:@"age"]; NSString *name = [person valueForKey:@"name"]; int age = [[person valueForKey:@"age"] intValue]; NSLog(@"name:%@",name); NSLog(@"age:%d",age); } return 0; }
4.新建Pet类,让Person类拥有一个Pet实例
Pet.h文件
#import <Foundation/Foundation.h> @interface Pet : NSObject { NSString *name; } @end
Pet.m文件默认,不做任何修改
更新Person.h文件,Person.m文件不做任何修改
#import <Foundation/Foundation.h> @class Pet; @interface Person : NSObject { NSString *name; int age; Pet *myPet; } @end
5.在main.m文件中,利用KVC访问myPet的name实例变量
#import <Foundation/Foundation.h> #import "Person.h" #import "Pet.h" int main(int argc, const char * argv[]) { @autoreleasepool { Person *person = [[Person alloc] init]; [person setValue:@"damon" forKey:@"name"]; [person setValue:@"20" forKey:@"age"]; NSString *name = [person valueForKey:@"name"]; int age = [[person valueForKey:@"age"] intValue]; NSLog(@"name:%@",name); NSLog(@"age:%d",age); Pet *pet = [[Pet alloc] init]; [pet setValue:@"旺旺" forKey:@"name"]; [person setValue:pet forKey:@"myPet"]; NSString *myPetName = [person valueForKeyPath:@"myPet.name"]; NSLog(@"myPetName:%@",myPetName); } return 0; }
三.总结
KVC这种比编码方式使用起来非常简单,结合KVO,很适用于当模型数据发生改变时,引发的UI改变的情况。
原文:http://www.cnblogs.com/damon-sf/p/4844986.html