zoukankan      html  css  js  c++  java
  • KVC与KVO

    KVC:(key value coding):提供了一种使用字符串而不是访问器的方式访问属性值的机制

    //给对象属性赋值:首先查找类中setName方法,如果没有,去查找类中_name的成员变量,再去查找name变量

        [_playList setValue:@"like" forKey:@"name"];

    //字典中的key和value,当_playList对象中没有setId:方法,没有id变量,也没有_id变量,为自动执行setValue:forUndefinedKey:方法,将id所对应的key赋值给对象的pid

        [_playList setValue:@"1001" forKey:@"id"];

    //给某个成员的成员赋值

        [_playList setValue:@"北京北京" forKeyPath:@"currentItem.name"];

    将字典中各个key所对应的value赋给对象对应的属性,如果对象没有对应的属性,会自动调用setValue:forUndefinedKey:方法,需要我们重写此方法

    [_playList setValuesForKeysWithDictionary:dic];

    KVO:(key value observer):A类中的某个属性值发生变化,B类的对象做为A类对象的观察者,能够观察到此变化,并进⾏后续的处理。

    为_playList增加一个观察者self,当_playList的name属性值发生变化时,self通过回调方法进行后续的处理

    options是观察的选项(值变化:新值、旧值)

    context:被观察者给观察者发送的数据,也可以为nil

    [_playList addObserver:self forKeyPath:@"name" options:NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld context:nil];

    //回调函数,当被观察者的属性值发生变化时调用的

    //keyPath:被观察的属性,object:被观察的对象,change:是变化前和变化后的值的字典,context:被观察者传递的数据

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

    {

        //如果被观察的对象是_playList

        if([object isKindOfClass:[PlayList class]]){

            //如果是name属性值发生变化

            if([keyPath isEqualToString:@"name"]){

                //取出name的旧值和新值

                NSString *oldName=[change objectForKey:@"old"];

                NSString *newName=[change objectForKey:@"new"];

                NSLog(@"object:%@,old:%@,new:%@",object,oldName,newName);

            }

        }

    }

    http://www.cnblogs.com/PaulpauL/ 版权声明:本文为博主原创文章,未经博主允许不得转载。
  • 相关阅读:
    Android开发 ViewConfiguration View的配置信息类
    Android 开发 倒计时功能 转载
    Android 开发 关于7.0 FileUriExposedException异常 详解
    Android 开发 实现文本搜索功能
    Android 开发 Activity里获取View的宽度和高度 转载
    Android 开发 存储目录的详解
    Android 开发 Fresco框架点击小图显示全屏大图实现 ZoomableDraweeView
    Android 开发 将window变暗
    Android 开发 DisplayMetrics获取Android设备的屏幕高宽与其他信息
    Android 开发 DP、PX、SP转换详解
  • 原文地址:https://www.cnblogs.com/PaulpauL/p/4935134.html
Copyright © 2011-2022 走看看