代理,通知,kvo

代理:一般控件用的比较多,其实也可以用block实现,如果实现的接口比较多的话,建议用代理,如UITableview。

通知:是全局的,而且是同步的,如果你要全局发送消息,并且做的事情时间不长,不会阻塞线程的话,建议使用。

KVO(Key-Value Observing):它提供一种机制,当指定的对象的属性被修改后,则对象就会接受到通知。简单的说就是每次指定的被观察的对象的属性被修改后,KVO就会自动通知相应的观察者了。
KVO是建立在KVC的基础之上的,它通过 key path 观察对象的值,当值发生变化的时候会收到通知。比如,你需要监听UITableview的contentoffset那么当,tableview滑动的时候,就会不停的收到contentoffset point值。你要监听某一对象的值的时候,建议使用。

使用方法:

  • 注册,指定被观察者的属性
  • 实现回调方法
  • 移除观察
stockForKVO = [[StockData alloc] init];  
[stockForKVO setValue:@"searph" forKey:@"stockName"];  
[stockForKVO setValue:@"10.0" forKey:@"price"];      
[stockForKVO addObserver:self forKeyPath:@"price" options:NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld context:NULL];  

实现回调方法

-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context  
{  
    if([keyPath isEqualToString:@"price"])  
    {  
        myLabel.text = [stockForKVO valueForKey:@"price"];  
    }  
}  

在最后的时候,移除观察者

- (void)dealloc  
{  
    [stockForKVO removeObserver:self forKeyPath:@"price"];   
} 

KVC(Key Value Coding):除了一般的赋值和取值的方法,我们还可以用Key-Value-Coding(KVC)键值编码来访问你要存取的类的属性。

Student *student = [[[Student alloc]init ]autorelease];
[student setValue:@"张三" forKey:@"name"];
NSString *name = [student valueForKey:@"name"];
NSLog(@"学生姓名:%@",name);

你可能感兴趣的:(代理,通知,kvo)