个人关于对KVC和KVO

来源:互联网 发布:鞋子价格,淘宝 编辑:程序博客网 时间:2024/06/13 16:49


用Xcode新建一个简单的工程为例:


建一个模型类 Student


在Student.h里面申明一个name 属性

#import <Foundation/Foundation.h>@interface Student : NSObject@property (nonatomic,copy) NSString *name;@end

在 ViewController.m 中

#import "ViewController.h"#import "Student.h"@interface ViewController (){        Student *_student;}@end@implementation ViewController- (void)viewDidLoad {    [super viewDidLoad];        _student = [[Student alloc] init];        _student.name = @"1569";        //KVC -->KEY VALUE CODING<键值编码>        [_student setValue:@"1568" forKey:@"name"];        NSLog(@"%@",_student.name);        //KVO -->KEY VALUE OBSERVER<键值观察者>    //工作原理    //A类有一个属性,同时给A类添加一个观察者B类,当A类的属性发生变化时,B类就会执行一个观察者方法来获取到A类属性发生变化的最新值        //添加一个观察者,    [_student addObserver:self forKeyPath:@"name" options:NSKeyValueObservingOptionNew context:nil];        _student.name = @"1567"; }//B类执行的观察者方法- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context{        //A 类的属性变化的值 保存在change里,如果想获取最新值,那么key是new,如果是旧值,那么key是old      NSString *name = [change objectForKey:@"new"];        NSLog(@"Student类的name属性变化的最新值是%@",name);                //假如程序崩了,写如下代码解决奔溃问题    //产生奔溃的原因是 没有移除观察者        [_student removeObserver:self forKeyPath:@"name"];    }


0 0
原创粉丝点击