kvo方法很简单,但是有几个需要注意的地方。(自己就掉坑里了)
例如:我需要监听 _selectedArray 数组内容的变化
伪代码:
注意点1,如果数组放到ViewController里面是无法监听的,我们需要把数组放到一个继承NSObject的类里面
1,首先新建一个类
@interface ObserveModel : NSObject
@property (nonatomic) NSMutableArray *array;
@implementation ObserveModel
2,把_selectedArray 赋给ObserveModel的属性
_observeModel = [ObserveModel new];
_observeModel.array = _selectedArray;
3,添加观察者:
[_observeModel addObserver:self forKeyPath:@"array" options:NSKeyValueObservingOptionNew context:nil];
4,实现方法 :如果_observeModel.array 发生了改变,则会调用该方法。
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSString *,id> *)change context:(void *)context{
}
注意点2,如果我们修改_observeModel.array
不能使用[_observeModel.array addObject:cartModel],
需要使用[[_observeModel mutableArrayValueForKey:@"array"]addObject:cartModel]
具体原因可以查查KVO的实现机制。
5,最后记得移除观察者
[_observeModel removeObserver:self forKeyPath:@"array"];