iOS 监听可变数组内容的变化(count)

监听数组内容的变化,也可以说是监听数组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"];
}

猜你喜欢

转载自blog.csdn.net/qq_28285625/article/details/104516204