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

IOS学习之初识KVC

2016-05-17 19:13 477 查看

什么是kvc?

kvc (key-value coding )键值编码,是ios 提供的一种通过key间接的来访问对象属性的一直方式。

哪些类支持kvc操作?

kvc的操作方法由NSKeyValueCoding协议提供,也就是说只要是这个协议的对象都支持kvc操作。

具体怎么使用?

  动态设置:

setValue:属性值 forKey:属性名(用于简单路径)

setValue:属性值 forKeyPath:属性路径 比如修改Person对象中Car的品牌 路径就是(car.brand)

  动态读取:

valueForKey:属性名

valueForKeyPath:属性名(用于复合路径)

具体写个测试程序看下:

Person.h

#import <Foundation/Foundation.h>

@interface Person : NSObject
{
@private
NSString *address;

}

@end


Person.m

#import "Person.h"
#import "Car.h"

@interface Person ()

@property (nonatomic ,strong) NSString *name;

@property (nonatomic,strong)Car *car;

@end

@implementation Person

-(id)init
{
self=[super init];
if(self){
self =[super init];
self.car=[[Car alloc]init];
}
return self;
}

@end


Car.h

#import <Foundation/Foundation.h>

@interface Car : NSObject

@end


Car.m

#import "Car.h"

@interface Car()

@property (nonatomic ,strong) NSString *brand;

@end

@implementation Car

@end


上述是就是本知识点的测试程序,我全部写的都是私有变量,我个人觉得用这种kvc机制去修改一个公有属性是一件完全没有意义的事情,直接不赋值不挺好?没必要绕这么一圈吧?可能我初学乍道,有别的原因希望有人能告诉我!

直接看具体测试:

[self.person setValue:@"zhejiang" forKey:@"address"];
[self.person setValue:@"whoislcj" forKey:@"name"];
[self.person setValue:@"aodi" forKeyPath:@"car.brand"];

NSLog(@"person.name ---->%@",[self.person valueForKey:@"name"]);
NSLog(@"person.address ---->%@",[self.person valueForKey:@"address"]);
NSLog(@"person.car.name ---->%@",[self.person valueForKeyPath:@"car.brand"]);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: