// 首先,建一个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];
// 通过setValue:forKey,可以在外部修改成员变量的值
[_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];
}