iOS-KVC(一)基本使用

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 

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

你可能感兴趣的:(iOS-KVC(一)基本使用)