监听数组内容的变化,也可以说是监听数组count的变化。(KVO直接监听数组的count会报错)
第一步
需要创建一个NSObject的类,创建一个mutArr的属性。(直接在controllrt里创建mutArr监听不生效)
@interface ObserverModel : NSObject
@property (nonatomic, strong) NSMutableArray *mutArr;
@end
@implementation SystemDetailObserverModel
-(NSMutableArray *)mutArr{
if(_mutArr == nil){
_mutArr = [NSMutableArray array];
}
return _mutArr;
}
@end
第二步
在controller里创建ObserverModel的对象,并监听key的变化
@property (nonatomic, strong) ObserverModel *observerModel;
[_observerModel addObserver:self forKeyPath:@"mutArr" options:NSKeyValueObservingOptionNew context:nil];
-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSKeyValueChangeKey,id> *)change context:(void *)context{
NSLog(@"触发了");
if([keyPath isEqualToString:@"mutArr"]){
}
}
第三步
改变mutArr
[[self.observerModel mutableArrayValueForKeyPath:@"mutArr"] addObject:[NSNumber numberWithInteger:i]];
[[_observerModel mutableArrayValueForKeyPath:@"mutArr"] removeObject:[NSNumber numberWithInteger:indexPath.section]];
[[_observerModel mutableArrayValueForKeyPath:@"mutArr"] removeAllObjects];
最后一步
在dealloc中调用移除observer方法,并检查dealloc能不能被正确调用。
-(void)dealloc{
NSLog(@"---------");
[_observerModel removeObserver:self forKeyPath:@"mutArr"];
}