美文网首页
iOS开发(高级特性)——KVC

iOS开发(高级特性)——KVC

作者: 猿哥媛姐 | 来源:发表于2022-02-15 00:28 被阅读0次

KVC是Key Value Coding的缩写,意思是键值编码。在iOS中,提供了一种方法通过使用属性的名称(也就是Key)来间接访问对象的属性方法。说的有的拗口,实际上就是通过类定义我们可以看到类的各种属性,那么使用属性的名称我们就能访问到类实例化后的对象的这个属性值。

这个方法可以不通过getter/setter方法来访问对象的属性。因为一个类的成员变量如果没有提供getter/setter的话,外界就失去了对这个变量的访问渠道。而KVC则提供了一种访问的方法,这个在某些场合会很有威力。

setValue:forKey://

不多说了,上代码:

@interface myPerson : NSObject

{

NSString *_name;

int      _age;

int      _height;

int      _weight;

}

@end

@interface testViewController : UIViewController

@property (nonatomic, retain) myPerson *testPerson;

@end

- (void)testKVC

{

testPerson= [[myPerson alloc] init];

NSLog(@"testPerson's initheight= %@", [testPerson valueForKey:@"height"]);

[testPerson setValue:[NSNumber numberWithInt:168] forKey:@"height"];

NSLog(@"testPerson'sheight= %@", [testPerson valueForKey:@"height"]);

}

第一段代码是定义了一个myPerson的类,这个类有一个_height的属性,但是没有提供任何getter/setter的访问方法。同时在testViewController这个类里面有一个myPerson的对象指针。

当myPerson实例化后,常规来说是无法访问这个对象的_height属性的,不过通过KVC我们做到了,代码就是testKVC这个函数。

运行之后打印值就是:

2013-11-02 11:16:21.970 test[408:c07] testPerson's init height = 0

2013-11-02 11:16:21.971 test[408:c07] testPerson's height = 168

这就说明确实读写了_height属性。

KVC的常用方法:

- (id)valueForKey:(NSString *)key;

- (void)setValue:(id)value forKey:(NSString *)key;

valueForKey的方法根据key的值读取对象的属性,setValue:forKey:是根据key的值来写对象的属性。

这里有几个要强调一下

1. key的值必须正确,如果拼写错误,会出现异常

2. 当key的值是没有定义的,valueForUndefinedKey:这个方法会被调用,如果你自己写了这个方法,key的值出错就会调用到这里来

3. 因为类key反复嵌套,所以有个keyPath的概念,keyPath就是用.号来把一个一个key链接起来,这样就可以根据这个路径访问下去

4. NSArray/NSSet等都支持KVC

相关文章

  • iOS开发(高级特性)——KVC

    KVC是Key Value Coding的缩写,意思是键值编码。在iOS中,提供了一种方法通过使用属性的名称(也就...

  • KVC

    iOS 如何使用KVC iOS开发UI篇—Kvc简单介绍 iOS开发系列--Objective-C之KVC、KVO

  • iOS开发技巧系列---详解KVC(我告诉你KVC的一切)

    iOS开发技巧系列---详解KVC(我告诉你KVC的一切) iOS开发技巧系列---详解KVC(我告诉你KVC的一切)

  • 4.iOS开发之KVC

    iOS的日常开发中KVC与KVO还是使用率蛮高的,整理一下。KVC和KVO都是基于OC的动态特性和Runtime机...

  • 5.iOS开发之KVO

    iOS的日常开发中KVC与KVO还是使用率蛮高的,整理一下。KVC和KVO都是基于OC的动态特性和Runtime机...

  • KVC

    KVC原理剖析 - CocoaChina_让移动开发更简单 iOS开发底层细究:KVC和KVO底层原理 | iOS...

  • 面试题知识点梳理

    重点KVC、KVOGCDRuntime iOS开发之Runtime——面试解析runloopBlock iOS开发...

  • iOS KVC与 KVO详解

    我们先看KVC KVC KVC(Key-value coding)键值编码,就是指iOS的开发中,可以允许开发者通...

  • iOS KVC和KVO详解

    KVC KVC定义 KVC(Key-value coding)键值编码,就是指iOS的开发中,可以允许开发者通过K...

  • iOS KVC和KVO详解

    KVC KVC定义 KVC(Key-value coding)键值编码,就是指iOS的开发中,可以允许开发者通过K...

网友评论

      本文标题:iOS开发(高级特性)——KVC

      本文链接:https://www.haomeiwen.com/subject/vufurttx.html