码迷,mamicode.com
首页 > 其他好文 > 详细

0124——KVC KVO模式

时间:2016-01-25 00:01:40      阅读:376      评论:0      收藏:0      [点我收藏+]

标签:

1.KVC

KVC是Key-Value-Coding的简称,它是一种可以直接通过字符串的名 字(key)来访问类属性(实例变量)的机制。而不是通过调用Setter、Getter方法访问。当使用KVO、Core Data、CocoaBindings、AppleScript(Mac支持)时,KVC是关键技术。

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

        Dog *dg = [[Dog alloc]init];

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

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

        [xw setValue:@"xiaowang" forKey:@"name"];

        NSString * name = [xw valueForKey:@"name"];

        NSLog(@"%@",name);

        //设置对象里的某个类的某个属性

        //确定类的对象是存在的

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

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

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

        NSLog(@"%@",dname);

2.KVO

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

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

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

2. 实现回调方法

3. 移除观察

 

-(instancetype)init{

    if (self =[super init]) {

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

        //监听器监听cardmoney的变化

        [self addObserver:self forKeyPath:@"card.money" options:NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld context:nil];

    }

    return self;

}

//回调

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

    

    NSLog(@"%d",[[change objectForKey:NSKeyValueChangeOldKey]intValue]);

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

}

//销毁

-(void)dealloc{

    [self removeObserver:self forKeyPath:@"card.money"];

    [super dealloc];

}

0124——KVC KVO模式

标签:

原文地址:http://www.cnblogs.com/damonWq/p/5156198.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!