zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    java生成4个不同的随机数
    前端学习(三十二)正则(笔记)
    前端学习(三十一)canvas(笔记)
    前端学习(三十)es6的一些问题(笔记)
    前端学习(二十九)nodejs(笔记)
    前端学习(二十八)es6&ajax(笔记)
    前端学习(二十七)存储&es6(笔记)
    前端学习(二十七)自动构造工具交互(笔记)
    前端学习(二十六)移动端s(笔记)
    前端学习(二十四)一些总结(笔记)
  • 原文地址:https://www.cnblogs.com/limicheng/p/3892852.html
Copyright © 2011-2022 走看看