• 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"];
    }
    
  • 相关阅读:
    Android Theme主题
    Android AbsoluteLayout绝对布局
    Android FrameLayout单帧布局
    Android TableLayout 表格布局
    Android LinearLayout线性布局
    Android RelativeLayout相对布局
    Unity中几种简单的相机跟随
    Android适配API23之后权限的动态申请
    natural gradient笔记
    优化整理
  • 原文地址:https://www.cnblogs.com/CH520/p/9962830.html
Copyright © 2020-2023  润新知