KVC和KVO的基本使用

// 首先,建一个MyClass的类

@interface MyClass : NSObject

{

    // 声明一个成员变量

    float _price;

}

- (void)print;

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


// 实现

@implementation MyClass

- (void)print {

    NSLog(@"%f", _price);

}

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

// 然后在viewControlller.m文件中

@interface ViewController ()

{

    MyClass *_myClass;

}


@implementation ViewController

- (void)viewDidLoad {

    _myClass = [[MyClass alloc]init];

    // 通过setValueforKey,可以在外部修改成员变量的值

    [_myClass setValue:[NSNumber numberWithFloat:11] forKey:@"price"];

    // 给对象添加一个观察者,观察某个属性或成员变量的变化

/*

     - (void)addObserver:(NSObject *)observer forKeyPath:(NSString *)keyPath options:(NSKeyValueObservingOptions)options context:(void *)context;

     调用这个方法的对象,是被观察的对象

     observer:观察者对象

     keyPath:被观察对象的被观察的属性或成员变量

     options:观察设置:如下有四种

     

     NSKeyValueObservingOptionNew 把更改之前的值提供给处理方法

     NSKeyValueObservingOptionOld 把更改之后的值提供给处理方法

     NSKeyValueObservingOptionInitial 把初始化的值提供给处理方法,一旦注册,立马就会调用一次。通常它会带有新值,而不会带有旧值。

     NSKeyValueObservingOptionPrior 2次调用。在值改变之前和值改变之后。

     

     context:随便一个参数值

[_myClass addObserver:self forKeyPath:@"price" options:NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld  context:nil];

    [_myClass print];

[self refreshValue];

}


- (void)refreshValue {

    NSNumber *price = [_myClass valueForKey:@"price"];

    float priceF = price.floatValue;

    priceF += 1.0;

    [_myClass setValue:[NSNumber numberWithFloat:priceF] forKey:@"price"];

    [self performSelector:@selector(refreshValue) withObject:nil afterDelay:1.0];

}



猜你喜欢

转载自blog.csdn.net/xuwenjie198812/article/details/49204475