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这样的值的变化是不可以的。