KVO的简单用法

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

//KVO是基于KVC的,观察者可以观察一个对象的某个属性(key),但这个属性的值(value)发生变化的时候,会触发一个事件

    //KVO中涉及到以下几个概念

    //被观察者 通常是  Model

    //观察者    通常是 Controller

    //key   被观察者的某个属性

    //value  key对应的值

    //设计模式中有一种设计模式  :观察者模式

    //KVO是观察者模式的一种实现方式,属于观察者设计模式

    //******KVO的使用流程

    //1.创建被观察对象

    //2.为被观察者指定观察者

    //3.实现 回调方法

    //4.修改 被观察的属性(会触发 回调方法)

    //5.移除观察者

实例:

创建一个Person类 ,Person类有一个name属性

根控制器ViewController.m中代码

#import "ViewController.h"
#import "Person.h"
@interface ViewController ()
{
    Person *_p;
}
@end

@implementation ViewController
-(void)dealloc
{
    [_p removeObserver:self forKeyPath:@"name"];
    [_p release];
    [super dealloc];
}
- (void)viewDidLoad
{
    [super viewDidLoad];
   
    //p用作被观察者
    _p = [[Person alloc] init];
    
    [_p addObserver:self forKeyPath:@"name" options:NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld context:@"hello"];
    _p.name = @"lisi";

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

//被观察者的属性发生变化时,才会触发此方法
-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
    NSLog(@"object = %@",object);
    NSLog(@"keyPath = %@",keyPath);
    NSLog(@"change  = %@",change);
    NSLog(@"context = %@",context);
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end
原文地址:https://www.cnblogs.com/limicheng/p/3892852.html