KVO的简单介绍

作者: Lonely__M | 来源:发表于2015-05-27 10:11 被阅读189次

    一,概述

    KVO,即:Key-Value Observing,它提供一种机制,当指定的对象的属性被修改后,则对象就会接受到通知。简单的说就是每次指定的被观察的对象的属性被修改后,KVO就会自动通知相应的观察者了。

    二、使用方法

    系统框架已经支持KVO,所以程序员在使用的时候非常简单。

    1. 注册,指定被观察者的属性,

    2. 实现回调方法

    3. 移除观察

    三、代码示例

    假设一个场景,定义一个Person类,属性有name,age,当年龄改变时,显示当前年龄

    1.定义Person类

    @interfacePerson :NSObject

    @property(strong,nonatomic)NSString*name;

    @property(nonatomic,assign)NSIntegerage;

    @end

    2.在controller中引入Person,实例化并监听属性

    当单击时,改变age,实现回调方法

    -(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void*)context

    @interfaceViewController()

    {

    Person*personKVO;

    }

    @end

    @implementationViewController

    - (void)viewDidLoad {

    [superviewDidLoad];

    // Do any additional setup after loading the view, typically from a nib.

    personKVO= [[Personalloc]init];

    [personKVOsetValue:@"admin"forKey:@"name"];

    [personKVOsetValue:@"20"forKey:@"age"];

    [personKVOaddObserver:selfforKeyPath:@"age"options:NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOldcontext:nil];

    }

    - (void)touchesBegan:(NSSet*)touches withEvent:(UIEvent*)event

    {

    //[personKVO setValue:@"21" forKey:@"age"];

    [personKVOsetAge:13];

    }

    - (void)observeValueForKeyPath:(NSString*)keyPath ofObject:(id)object change:(NSDictionary*)change context:(void*)context

    {

    if([keyPathisEqual:@"age"])

    {

    idage =[personKVOvalueForKey:@"age"];

    NSLog(@"age改变%@",age);

    }

    }

    - (void)didReceiveMemoryWarning {

    [superdidReceiveMemoryWarning];

    // Dispose of any resources that can be recreated.

    }

    @end

    当Model值发生改变时,监听对象会立即得到通知,适用于界面数据展示。

    简单随笔,愿与君共勉。

    相关文章

      网友评论

        本文标题:KVO的简单介绍

        本文链接:https://www.haomeiwen.com/subject/jmurqttx.html