zoukankan      html  css  js  c++  java
  • IOS-KVC/KVO

    KVC 简单介绍设值的一个工具。对于指向id的对象。像其内存存取值。这有点像java的反射;

    存在例如以下一个对象。已知其属性name,可取值: 

    id p=[[Person alloc] init];
    NSString *name=[p valueForKey:@"name"];

    如果,有一个数组,里面存在一系列的对象,我们想取出某一属性放在一个队列中,例如以下:

    Book *book1=[[Book alloc] init];
            book1.name=@"effctive c++";
            
            Book *book2=[[Book alloc] init];
            book2.name=@" more effctive c++";
            
            Book *book3=[[Book alloc] init];
            book3.name=@" most effctive c++";
            
            NSArray *arr=@[book1,book2,book3];
            
            NSLog(@"%@",[arr valueForKey:@"name"]);

    生活中,我们确实存在以上的需求;


    KVO指的是设值过程中对其监听的过程,以实现对业务逻辑的校验

    //创建一个被监视的对象
            Book *book1=[[Book alloc] init];
            
            //设置监听对象
            BookObserve *observe=[[BookObserve alloc] init];
            
            //对其存值的监听-这样的方法用完后不须要移除监听器
            [observe observeValueForKeyPath:@"name" ofObject:book1 change:nil context:@"sadsada"];
            
            //对其存值的监听-02
            [book1 addObserver:observe forKeyPath:@"name" options:NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld context:nil];
            
            book1.name=@" most effctive c++";
            NSLog(@"%@",book1.name);
            
            //取消对其存值的监听-02
            [book1 removeObserver:observe forKeyPath:@"name"];

    对于监听对象,无需实现不论什么代理,由于他是NSObject的派生类

    仅仅要在.m文件里实现例如以下方法就可以监听:

    #pragma mark keyPath:对象属性 object:对象 change:存取值保存的字典
    -(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
    {
    }




  • 相关阅读:
    第六章 实验报告
    第三次实验报告
    第五章 循环结构课后反思
    第二次实验报告
    第一次实验报告
    第一次作业
    第九章
    指针实验报告
    第七次实验报告
    第六章
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/5203734.html
Copyright © 2011-2022 走看看