KVO

2018-01-18  本文已影响8人  移动端_小刚哥

键值观察KVO(Key-Value Observing)是一种允许通知对象--其他对象的制定属性已经作出更改--的机制。主要用到NSKeyValueObserving类

要使用KVO,必须确保所观察的对象符合KVO标准,通常情况下,如果所创建的对象继承自NSObject并且以常规方式创建属性,那么该对象及其属性将自动符合KVO标准。

使用步骤

1、注册观察对象

  - (void)addObserver:(NSObject *)observer forKeyPath:(NSString *)keyPath options:(NSKeyValueObservingOptions)options context:(nullable void *)context;

官方文档示例:使用静态变量的地址作为上下文内容
static void * PersonAccountBalanceContext =&PersonAccountBalanceContext; static void * PersonAccountInterestRateContext =&PersonAccountInterestRateContext;

2、实现检测的方法

- (void)observeValueForKeyPath:(nullable NSString *)keyPath ofObject:(nullable id)object change:(nullable NSDictionary<NSKeyValueChangeKey, id> *)change context:(nullable void *)context;

当被观察对象属性值发生变化时,观察者会收到一条消息。观察者必须实现这个方法,在该方法中可以通过keyPath或者context去判断数据来源,若要取出change字典里的值要使用下面枚举定义的key

3、移除观察者

  - (void)removeObserver:(NSObject *)observer forKeyPath:(NSString *)keyPath context:(nullable void *)context / - (void)removeObserver:(NSObject *)observer forKeyPath:(NSString *)keyPath;

观察者在释放时不能主动释放自己,被观察对象还可以继续发送消息给观察者,但是如果观察者已经释放掉,这个时候会触发内存访问异常,所以一定要在观察者被释放之前移除观察者。常见的模式是在viewDidLoad注册为观察者,在dealloc注销观察者。

相关文档
原文地址

上一篇 下一篇

猜你喜欢

热点阅读