iOS-KVC(一)基本使用
iOS-KVC(二)内部赋值深层次原理
iOS-KVC(三)内部取值深层次原理
iOS-KVC(四)常见异常处理
iOS-KVC(五)容器类
iOS-KVC(六)正确性验证
iOS-KVC(七)字典相关
iOS-KVC(八)常见使用
KVC 简介
-
KVC全称是Key Value Coding(键值编码),是一个基于NSKeyValueCoding非正式协议实现的机制,它可以直接通过key值对对象的属性进行存取操作,而不需通过调用明确的存取方法。这样就可以在运行时动态在访问和修改对象的属性,而不是在编译时确定。
-
KVC提供了一种间接访问属性方法或成员变量的机制,可以通过字符串来访问对象的的属性方法或成员变量。
-
KVC是基于OC的动态特性和Runtime机制的。
KVC最为重要的四个方法
- (nullable id)valueForKey:(NSString *)key; //直接通过Key来取值
- (void)setValue:(nullable id)value forKey:(NSString *)key; //通过Key来设值
- (nullable id)valueForKeyPath:(NSString *)keyPath; //通过KeyPath来取值
- (void)setValue:(nullable id)value forKeyPath:(NSString *)keyPath; //通过KeyPath来设值
衍生的keyPath方法,用来进行深层访问(key使用点语法),也可单层访问。
简单的使用示例
- 单层
#import "ViewController.h"
@interface ViewController ()
{
NSString *address; //成员变量
}
@property (nonatomic, copy) NSString *name; //属性
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
//为属性赋值与取值
[self setValue:@"hui" forKey:@"name"]; //设置值
NSString *name = [self valueForKey:@"name"]; //获取值
NSLog(@"%@", name);
//为成员变量赋值与取值
[self setValue:@"Xiamen" forKey:@"address"]; //设置值
NSString *address = [self valueForKey:@"address"]; //获取值
NSLog(@"%@", address);
}
@end
结果:
2019-06-22 17:05:15.018559+0800 study[2038:33259] hui
2019-06-22 17:05:15.018813+0800 study[2038:33259] Xiamen
- 多层(KeyPath)
Person类
#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
@interface Person : NSObject
@property (nonatomic, copy) NSString *name;
@end
NS_ASSUME_NONNULL_END
#import "Person.h"
@implementation Person
@end
#import "ViewController.h"
#import "Person.h"
@interface ViewController ()
@property (nonatomic, strong) Person *person;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
self.person = [[Person alloc] init];
//为Preson的name属性赋值与取值(KeyPath)
[self setValue:@"hui" forKeyPath:@"person.name"];
NSString *name = [self valueForKeyPath:@"person.name"];
NSLog(@"%@", name);
}
@end
结果:
2019-06-22 18:00:14.019477+0800 study[3544:60087] hui
网友评论