KVC是Key Value Coding的缩写,意思是键值编码。在iOS中,提供了一种方法通过使用属性的名称(也就是Key)来间接访问对象的属性方法。说的有的拗口,实际上就是通过类定义我们可以看到类的各种属性,那么使用属性的名称我们就能访问到类实例化后的对象的这个属性值。
这个方法可以不通过getter/setter方法来访问对象的属性。因为一个类的成员变量如果没有提供getter/setter的话,外界就失去了对这个变量的访问渠道。而KVC则提供了一种访问的方法,这个在某些场合会很有威力。
不多说了,上代码:
- @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 init height = %@", [testPerson valueForKey:@"height"]);
- [testPerson setValue:[NSNumber numberWithInt:168] forKey:@"height"];
- NSLog(@"testPerson's height = %@", [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设计模式详解** Key-Value Coding(KVC)是Objective-C语言中的一个核心特性,它允许程序以一种间接的方式访问对象的属性,无需使用点语法或 setter/getter 方法。KVC 提供了一种灵活的数据绑定机制,使得...
**iOS KVC(Key-Value Coding)实现原理** Key-Value Coding(KVC)是Apple在Objective-C中引入的一种机制,它允许程序通过键值来访问对象的属性,而无需直接调用setter或getter方法。KVC在很多Apple的框架中都有...
# iOS KVC(Key-Value Coding)简单用法详解 KVC,即Key-Value Coding,是Apple在iOS和Mac OS X开发中提供的一种间接访问对象属性的技术。它允许我们通过字符串键来存取和修改对象的属性,而无需直接调用getter或...
**iOS KVC(Key-Value Coding)与KVO(Key-Value Observing)详解** KVC和KVO是Objective-C及Swift中用于对象属性间接访问和观察的重要技术,它们为开发者提供了灵活的数据绑定和动态属性更新机制。在iOS开发中,...
**iOS KVC实例详解** 键值编码(Key-Value Coding,简称KVC)是Apple的Objective-C编程语言中的一种机制,它提供了一种间接访问对象属性的方式,无需直接调用getter或setter方法。KVC在许多苹果框架如Core Data、...
**KVC(Key-Value Coding)是iOS开发中的一个重要概念,它是Apple的Cocoa和Cocoa Touch框架中的一种数据访问机制。KVC提供了一种间接访问对象属性的方式,无需使用点语法或setter/getter方法。在本文中,我们将深入...
在iOS开发中,Key Value Coding (KVC) 和 Key Value Observing (KVO) 是两种强大的数据处理技术,它们提供了一种间接访问对象属性的方法,以及动态监控属性变化的能力。 KVC,全称Key Value Coding,是Objective-C...
在iOS开发中,KVC被广泛应用于数据绑定、序列化、动态属性访问等多种场景。下面我们将详细探讨KVC的工作原理和使用方法。 首先,KVC的核心在于它的两个主要方法: 1. `- (id)valueForKey:(NSString *)key;` 这个...
- **属性必须遵循KVC(Key-ValueCoding)**:KVO建立在KVC之上,因此被观察的属性必须支持KVC,即属性名称需要符合键值编码的规则,通常为驼峰命名。 - **属性需使用`@dynamic`声明**:为了使KVO工作正常,被观察的...
### KVC技术指南 -- iOS官方 #### 一、引言 **KVC(Key-Value Coding)**是一种在iOS及OS X开发中广泛使用的模式,它允许开发者通过键(Key)来读取或修改对象的属性值,而无需直接调用特定的方法。这种间接访问...
### iOS KVO KVC 编程 #### KVC与KVO简介 在iOS开发中,键值编码(Key-Value Coding, KVC)和键值观察(Key-Value Observing, KVO)是两个非常重要的概念,它们为Objective-C语言提供了一种灵活的方式来访问和修改...
在iOS开发中,Key-Value Coding (KVC) 和 Key-Value Observing (KVO) 是两种非常重要的机制,它们都是Objective-C中的特性,用于对象属性的动态访问和观察。KVC提供了一种间接访问对象属性的方式,而KVO则允许我们...
**iOS自定义KVC(Key-Value Coding)的实现与使用** KVC是Apple的Objective-C框架中的一个重要特性,它允许我们间接地访问对象的属性,而无需直接调用getter或setter方法。KVC在很多场景下都非常有用,比如数据绑定...
在ios 13之前,UITextField可以通过KVC修改属性 //字体颜色 [textField setValue:[UIColor whiteColor]forKeyPath:@_placeholderLabel.textColor]; //字体大小 [textField setValue:[UIFont boldSystemFontOfSize:...
**KVC (Key-Value Coding)** 是Objective-C中的一种机制,允许间接访问对象的属性,无需使用点语法或 setter/getter 方法。KVC是Apple框架中的一个重要组成部分,它被广泛用于数据绑定、属性检索和集合操作。通过KVC...
但需要注意的是,键值观察(KVO)是建立在键值编码(Key Value Coding,简称KVC)的基础上,也就是说任何你想使用KVO观察的属性必须符合键值编码。 这个demo主要以字符串、数组为例来学习键值编码和键值观察。 ...
在iOS开发中,Key-Value Coding (KVC) 和 Key-Value Observing (KVO) 是两种非常重要的机制,它们都是Objective-C中的特性,用于间接访问对象的属性和监测属性值的变化。这篇文将深入探讨这两种技术,以及如何在实际...
KVC全称是Key Value Coding(键值编码),是一个基于NSKeyValueCoding非正式协议实现的机制,它可以直接通过key值对对象的属性进行存取操作,而不需通过调用明确的存取方法。这样就可以在运行时动态在访问和修改对象...
在iOS应用开发中,使用各种框架能够极大地提升开发效率,优化用户体验。以下是对标题和描述中提及的四个关键框架的详细解释: 1. **数据请求框架**:在iOS开发中,最常用的数据请求框架是AFNetworking。这是一个...
**KVC (Key-Value Coding)** 是Objective-C中的一种机制,允许间接访问对象的属性,无需使用点语法或 setter/getter 方法。它主要用于集合操作、序列化和...这些技术对于创建响应式、灵活且易于维护的iOS应用至关重要。