zoukankan      html  css  js  c++  java
  • KVO 的代码简洁使用

    1、类属性设置与创建

    // KvoClass.h
    @interface KvoClass : NSObject
    @property(nonatomic, copy) NSString *name;
    @end
    
    // ViewController.m
    @property(nonatomic, retain) KvoClass *kvoObject;
    _kvoObject = [[KvoClass alloc] init];
    

    2、KVO 添加

    // 添加观察者
    [_kvoObject addObserver:self
                 forKeyPath:@"name"
                    options:NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld
                    context:@"nameChange"];
    // 改变被观察的键对应的值
    _kvoObject.name = @"xiao bai";
    sleep(2);
    _kvoObject.name = @"xiao hei";
    

    3、KVO 回调

    // 系统自带方法
    - (void)observeValueForKeyPath:(NSString *)keyPath
                          ofObject:(id)object
                            change:(NSDictionary *)change
                           context:(void *)context {
        if (context == @"nameChange") {
            NSLog(@"name 值被改变 kind = %@, oldValue = %@, newValue = %@",
                         change[@"kind"], change[@"old"], change[@"new"]);
        } 
        else {
            [super observeValueForKeyPath:keyPath ofObject:object change:change context:context];
        }
    }
    

    4、KVO 移除

    • 在实际工作中需要在合适的时候移除观察者身份。
    - (void)removeObserver:(NSObject *)observer forKeyPath:(NSString *)keyPath context:(nullable void *)context;
    - (void)removeObserver:(NSObject *)observer forKeyPath:(NSString *)keyPath;
    
    - (void)dealloc {
        // 移除观察者
        [_kvoObject removeObserver:self forKeyPath:@"name" context:@"nameChange"];
    }
    
  • 相关阅读:
    WLAN 802.11 a/b/g PHY Specification and EDVT Measurement III
    L233
    L232 No methane on Mars
    leetcode 38 Count and Say ---java
    海量字符串查找——bloom filter,c
    leetcode 37 Sudoku Solver java
    mount --bind使用方法
    ECS API
    Linux挂载磁盘
    ECS简述
  • 原文地址:https://www.cnblogs.com/CH520/p/9962830.html
Copyright © 2011-2022 走看看