• KVC与KVO


    1.KVC

    KVC--Key-Value-Coding   可以直接通过字符串的名字(key)来访问类属性(实例变量)的机制,不用调用setter、getter方法访问,当使用KVO,CoreData,CocaaBindings,AppleScript(Mac支持)时,KVC是关键技术。

    Person *xw = [[Person alloc ]init];

    //使用kvc设置成员变量的值

    //使用之前必须知道变量的名

    [xw setValue:@"xiaowang"forKey:@"name"];  -----------name必须是变量的名不能有一点差别

    NSString *name = [xw valueForKey:@"name"];-------读取Key的值

    NSLog(@"%@",name);

    //设置对象里的某个类的某个属性 确定类的对象一定是存在的

    Dog *dog = [[Dog alloc]init];-------要先有dog的对象

    [xw setValue:dg forKey:@"dg"];

    [xw setValue:@"wangwang"forKeyPath:@"dg.dogName"];

    NSString *dgname = [xw valueForKeyPath:@"dg.dogName"];

    NSLog(@"%@",dgname);

    2.KVO

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

    系统框架已经支持KVO,所以程序员在使用的时候非常简单。

    1,注册,指定被观察者的属性

    2,实现回调方法

    3.移除观察

    cread.h中定义int money;

    Person.h中定义cread *card;

    Person.m中实现

    -(instancetype)init{

    if(self = [super init]){

    self.card = [[[Creat alloc]init]autorelease];

    //添加监听器,监听cread中money的变化之前和之后的值

    [self addOberve:self forKeyPath:@"cread.money" options:NSKeyObservingOptionOld|NSKeyObservingOptionNew context:nil];

    }

    return self;

    }

    //回调

    -(void)obseveValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSString *,id>*)change context:(void*)context{

    int oldValue = [[change objectForKey:NSKey:NSKeyValueChangeOldKey] intValue];

    int newValue = [[change objectForKey:NSKey:NSKeyValueChangeNewKey]intValue];
    NSLog(@"old:%d",[[change objectForKey:NSKeyValueVhangeOldKey]initValue]);

    NSLog(@"new:%d",[[change objectForKey:NSKeyValueChangeNewKey]initValue]);

    }

    //销毁

    -(void)dealloc{

    [_cread  realease];
    [self removeObserver:self forKeyPath:@"cread.money"];

    [super dealloc];

    }

    main.m实现

    Person *xw = [[[Person alloc]init]autorelease];

    [xw setValue:@1000 forKeyPath:@"cread.money"];

    [xw setValue:@2000 forKeypath:@"cread.money"];

    }

    return 0 ;

    }

  • 相关阅读:
    Oracle结构连接配置结构
    理解cookie和session机制
    Asp.net中网站级异常捕获
    C#字符串函数大全
    一个简单的C#多线程间同步的例子
    SQL中的存储过程存放位置
    类和结构的区别?
    SQL点滴9—使用with语句来写一个稍微复杂sql语句
    Asp.NET 的Session实现原理 转自21kaiyun.com
    Script to analyze table space usage
  • 原文地址:https://www.cnblogs.com/yangqinglong/p/5154728.html
Copyright © 2020-2023  润新知