iOSは、変数配列(カウント)の内容の変更を監視します

アレイの内容の変化を監視することは、アレイの数の変化を監視しているとも言えます。(KVOはアレイのカウントを直接監視し、エラーを報告します)

最初の一歩

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

第二段階

コントローラにObserverModelオブジェクトを作成し、キーの変更を監視します

@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"]){
    }
}

3番目のステップ

mutArrを変更する

[[self.observerModel mutableArrayValueForKeyPath:@"mutArr"] addObject:[NSNumber numberWithInteger:i]];

[[_observerModel mutableArrayValueForKeyPath:@"mutArr"] removeObject:[NSNumber numberWithInteger:indexPath.section]];

[[_observerModel mutableArrayValueForKeyPath:@"mutArr"] removeAllObjects];

最後のステップ

Deallocでremoveobserverメソッドを呼び出し、deallocを正しく呼び出すことができるかどうかを確認します。

-(void)dealloc{
    NSLog(@"---------");
    [_observerModel removeObserver:self forKeyPath:@"mutArr"];
}

おすすめ

転載: blog.csdn.net/qq_28285625/article/details/104516204