KVO的简单实现方法
KVO (Key Value Observing)是ios里面一种特别方便的机制用于“捕捉”对象属性的变化。在概念理解上,是设计模式里面观察者模式的一种实践。
目标:观察UILabel对象属性
- (void)viewDidLoad
{
[super viewDidLoad];
self.lab=[[UILabel alloc]initWithFrame:CGRectMark(10,10,100,30)];
self.lab.title=@"One";
[self.lab addObserver:self forKeyPath:@"title" options:NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld context:NULL];
double delayInsecond=2.0;
dispatch_time_t popTiem=dispatch_time(DISPATCH_TIME_NOW,delayInSeconds * NSEC_PER_SEC);
dispatch_after(poptime,dispatch_get_main_queue(),^(void){
dispatch_async(dispatch_get_main_queue(),^{
self.lab.title=@"Two";
})
})
}
-(void) observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictinary *)change context:(void *)context
{
NSLog(@"%@",keyPath);
NSLog(@"%@",object);
NSLog(@"%@",change);
}
-(void)dealloc{
[self.lab removeObserver:self forKeyPath:@"title"];
}
(WARNING:dispatch_sync(dispatch_get_main_queue(), ^{ // something }); sync -> FIFO)
注:KVO是基于KVC实现的,所以如果你想观察例如NSMutableArray的count这样的值的变化是不可以的。