KVC和KVO的简要介绍

来源:互联网 发布:知乎日报 rss地址 编辑:程序博客网 时间:2024/05/24 02:34

概念:

KVC即NSKeyValueCoding(键值编码),一种可以不通过 Getter或者Setter方式而直接通过对象属性字符串的方式对属性值进行编辑和访问的机制。KVO即NSKeyValueObserving(键值监听),一种当对象的属性值发生变化时,允许当前对象收到通知的机制。

KVC代码示例:

创建了一个person类,在其m文件添加如下变量
@interface Person(){    NSString *name;    NSNumber *age;    Student *student;    }@end

其中Student类如下

@interface Student : NSObject{    NSString *schoolNumber;}@end 

在控制器中创建并采用kvc的方式对person 对象赋值和取值
Person *person = [[Person alloc]init];    //KVC赋值    [person setValue:@"liwei" forKey:@"name"];    [person setValue:@24 forKey:@"age"];        Student *student = [[Student alloc]init];    [student setValue:@"201007020216" forKey:@"schoolNumber"];    [person setValue:student forKey:@"student"];    [person setValue:@"201007020217" forKeyPath:@"student.schoolNumber"];        //KVC取值    NSString *name = [person valueForKey:@"name"];    NSNumber *age = [person valueForKey:@"age"];    NSLog(@"个人信息\n name:%@\n age:%@",name,age);    //KVC通过键路径访问    NSString *schoolNumber = [person valueForKeyPath:@"student.schoolNumber"];    NSLog(@"%@",schoolNumber);

KVO代码示例:

#import "Person.h"@interface Person(){    NSString *name;    NSNumber *age;    Student *student;}@end@implementation Person- (instancetype)init{        self = [super init];    if (self) {        [self addObserver:self forKeyPath:@"age" options:NSKeyValueObservingOptionNew| NSKeyValueObservingOptionOld context:nil];    }    return self;}- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSString *,id> *)change context:(void *)context{        if ([keyPath isEqualToString:@"name"]) {        NSString *name1 = [change objectForKey:@"new"];        NSLog(@"更名为:%@",name1);    }}- (void)dealloc{        [self removeObserver:self forKeyPath:@"age"];}

注意,在文件中使用了简直监听机制需要在销毁时移除之前注册的监听,否者会抛出异常。

1 0
原创粉丝点击