美文网首页
KVO键值监听相关

KVO键值监听相关

作者: 莫_名 | 来源:发表于2016-09-20 20:44 被阅读0次

    ①为被监听对象注册监听器
    ②重写监听器的observeValueForKeyPath:ofObject:change:context:
    ③在dealloc中使用removeObserver:forKeyPath:为key路径删除指定的监听器

    kvo.png
    
    // 自定义setItem:方法
    - (void) setItem:(FKItem*) item
    {
        self->_item = item;
        // 为item添加监听器,监听item的name属性的改变
        [self.item addObserver:self forKeyPath:@"name"
        options:NSKeyValueObservingOptionNew
        context:nil];
        // 为item添加监听器,监听item的price属性的改变
        [self.item addObserver:self forKeyPath:@"price"
        options:NSKeyValueObservingOptionNew
        context:nil];
    }
    
    // 重写该方法,当被监听的数据模型发生改变时,就会回调监听器的该方法
    - (void)observeValueForKeyPath:(NSString *)keyPath
    ofObject:(id)object change:(NSDictionary *)change
    context:(void *)context
    {
        NSLog(@"--observeValueForKeyPath方法被调用--");
        // 获取修改时所设置的数据
        NSLog(@"被修改的keyPath为:%@", keyPath);
        NSLog(@"被修改的对象为:%@", object);
        NSLog(@"新被修改的属性值为:%@", [change objectForKey:@"new"]);
        NSLog(@"被修改的上下文为:%@", context);
    }
    
    - (void) dealloc
    {
        // 删除监听器
        [self.item removeObserver:self forKeyPath:@"name"];
        [self.item removeObserver:self forKeyPath:@"price"];
    }
    
    

    相关文章

      网友评论

          本文标题:KVO键值监听相关

          本文链接:https://www.haomeiwen.com/subject/ywvoettx.html