zoukankan      html  css  js  c++  java
  • 2016.01.22 KVC&KVO

    KVC

      KVC实际上是Key-Value Coding的简称,它是一种可以直接通过字符串的名字(key)来间接访问类属性(实例变量)的机制。

     代码实现:

     1 #import <Foundation/Foundation.h>
     2 #import "Person.h"
     3 #import "Dog.h"
     4 
     5 int main(int argc, const char * argv[]) {
     6     @autoreleasepool {
     7         Person *xiaoming = [[Person alloc] init];
     8         
     9         //使用kvc设置变量的值
    10         [xiaoming setValue:@"xm" forKey:@"name"];
    11         
    12         NSString *name = [xiaoming valueForKey:@"name"];
    13         NSLog(@"%@", name);
    14         
    15         //确保狗是存在的
    16         Dog *ww = [[Dog alloc] init];
    17         [xiaoming setValue:ww forKeyPath:@"dg"];
    18         
    19         [xiaoming setValue:@"汪汪" forKeyPath:@"dg.dogName"];
    20         NSLog(@"%@", [xiaoming valueForKeyPath:@"dg.dogName"]);
    21     }
    22     return 0;
    23 }

       kvc是一种间接的访问,这里特别要注意的是:key值,也就是变量的名字一定不可以写错

    KVO

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

     代码实现:(MRR)

    #import "Person.h"
    
    @implementation Person
    
    - (void)dealloc{
        [_card release];
        [self removeObserver:self forKeyPath:@"card.money"];
        [super dealloc];
    }
    - (instancetype)init{
        if (self = [super init]) {
            self.card = [[[CreditCard alloc] init] autorelease];
            
            [self addObserver:self forKeyPath:@"card.money" options:NSKeyValueObservingOptionOld| NSKeyValueObservingOptionNew context:nil];
        }
        return self;
    }
    
    - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSString *,id> *)change context:(void *)context{
        NSLog(@"old:%@", [change objectForKey:NSKeyValueChangeOldKey]);
        NSLog(@"new:%@", [change objectForKey:NSKeyValueChangeNewKey]);
    
    }
    
    @end
  • 相关阅读:
    [NOIP2015] 子串 题解
    [NOIP2011] 聪明的质检员 题解
    二进制的一些概念
    [NOIP2012] 借教室 题解
    [POJ3764] The XOR Longest Path 题解
    关于本博客
    【SC-MY限定】让填写问卷星成为自动化!
    JZOJ5833 永恒
    九校联考-DL24凉心模拟Day2总结
    【简解】SP7556 Stock Charts
  • 原文地址:https://www.cnblogs.com/immustard/p/5158339.html
Copyright © 2011-2022 走看看