zoukankan      html  css  js  c++  java
  • kvo深入浅出举例

    一,概述

     
    KVO,即:Key-Value Observing,它提供一种机制,当指定的对象的属性被修改后,则对象就会接受到通知。简单的说就是每次指定的被观察的对象的属性被修改后,KVO就会自动通知相应的观察者了。
    二,使用方法
    系统框架已经支持KVO,所以程序员在使用的时候非常简单。
    1. 注册,指定被观察者的属性   
    2. 实现回调方法 谁是观察者 这个回调方法就写在哪
    3. 移除观察  最好在dealloc中写
    三,实例:
    假设一个场景,股票的价格显示在当前屏幕上,当股票价格更改的时候,实时显示更新其价格。
    添加两个实体类 一个是股票Strock 一个是person
     
    Strock.h
    @interface Strock : NSObject
    {
        NSString *_name;
        float _price;
    }
    @end
    Strock.m
    -(NSString *)description
    {
        return [NSString stringWithFormat:@"name:%@,price:%f",_name,_price];
    }
     
    person.m
    //回调方法
    -(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
    {
        NSLog(@"keyPath:%@,object:%@,change:%@",keyPath,object,change);
    }
    viewController.m
        self.person = [[Person alloc]init];
        self.strock = [[Strock alloc]init];
       
        //给属性赋值
        [self.strock setValue:@"baidu" forKey:@"_name"];
        [self.strock setValue:@155 forKey:@"_price"];
       
        //设置person为观察者
        [self.strock addObserver:self.person forKeyPath:@"_price" options:NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld context:nil];
       
    }
    //拖进来一个点击 事件  当button点击的时候
    - (IBAction)priceClicked:(UIButton *)sender {
        NSInteger price = [[self.strock valueForKey:@"_price"]floatValue];
       
        [self.strock setValue:@(price+1) forKey:@"_price"];
    }
    //移除观察者
    -(void)dealloc
    {
        [self.strock removeObserver:self.person forKeyPath:@"_price" context:nil];
    }
    对上述的代码,有任何疑问,可以在下方留言。 也可以给我发邮件咨询:673658917@qq.com 或者是直接加qq:673658917 转载请注明出处,谢谢合作。 睡觉舒服,那是给死人准备的,加油吧,一年后你会感谢现在的自己的。
  • 相关阅读:
    winfrom 正则验证
    winfrom api发送消息,实现滚动效果(重绘滚动条用)
    C#程序员开发WinForm必须知道的 Window 消息大全
    C# VS EditorBrowsable特性 控制智能提示
    C# Attribute简介
    Win32窗口鼠标消息
    C# 自定义控件容器,设计时可添加控件
    Linux管线命令
    Linux数据流重定向
    Shell中的变量
  • 原文地址:https://www.cnblogs.com/lishanshan/p/4878216.html
Copyright © 2011-2022 走看看