都需要在dealloc中釋放
-(void)dealloc{
? ? //移除監(jiān)聽、觀察對象
[object removeObserver:self forKeyPath:@"age"];
}
?1 、//添加觀察對象
?[object addObserver: observer forKeyPath: @"age" options: 0 context: nil];
object: 被觀察者
observer: 觀察者,一般是 self 控制器
options: 有四個值
1、NSKeyValueObservingOptionNew 把更改之前的值提供給處理方法
2、NSKeyValueObservingOptionOld 把更改之后的值提供給處理方法
3、NSKeyValueObservingOptionInitial 把初始化的值提供給處理方法, 一旦注冊,立馬就會調(diào)用一次。通常它會帶有新值,而不會帶有舊值。
4、NSKeyValueObservingOptionPrior 分2次調(diào)用。在值改變之前和值改變之后。
context:上下文,可以帶一些參數(shù),任何類型都可以
所有的 kvo 監(jiān)聽到事件,都會調(diào)用此方法
1. 觀察的屬性
2. 觀察的對象
3. change 屬性變化字典
4. 上下文,與監(jiān)聽的時候傳遞的一致
- (void)observeValueForKeyPath:(NSString*)keyPath ofObject:(id)object change:(NSDictionary*)change context:(void*)context;