KVO
(Key-Value-Observer)是iOS中一个重要的概念,与协议(Protocol
)、通知中心(NSNotification
)、代码块(Block
)等一起构起iOS的==通知体系==。
KVO主要提供对对象的属性变化的监听,包括对象属性的初始化、对象的修改,通过KVO我们可以获得对象属性修改的即时通知,以此来做一些程序的必要动作。
使用篇
KVO可以对当前对象的属性进行监听,同时也可以对其他对象的属性进行监听。
使用方法
//添加监听
[被监听对象 addObserver:监听者 forKeyPath:@"被监听对象属性" options:NSKeyValueObservingOptionNew context:nil];
//移除监听
[被监听者 removeObserver:监听者 forKeyPath:@"被监听对象属性" context:nil];
//获取监听事件改变
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSString *,id> *)change context:(void *)context {
}
注意点
KVO添加监听和移除监听必须成对出现
,并且在被监听对象
销毁前,需要移除被监听对象
的监听事件,否则在被监听对象
销毁的时候导致程序崩溃。崩溃提示信息:
*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'An instance *** of class Observer was deallocated while key value observers were still registered with it.
Demo : KVO使用及注意点