zoukankan      html  css  js  c++  java
  • KVO (Key-Value-Observer, 键值观察)

    KVO (Key-Value-Observer, 键值观察)

     

    valueForKey valueForKeyPath区别

        valueForKeyPathvalueForKey的升级, valueForKey都能用valueForKeyPath, valueForKey只能一层   

     KVC计算数组和

        NSArray *array = @[@"1", @"2", @"3", @"4", @"5"];
        NSNumber *sum = [array valueForKeyPath:@"@sum.integerValue"];
        NSLog(@"%@", sum);

    KVC修改 UITextField的占位字符颜色

    // 设置占位文字的颜色为红色
    [self setValue:[UIColor redColor] forKeyPath:@"_placeholderLabel.textColor"];

        KVO: Key-Value-Observer, 键值观察

      1.添加观察者

        第一个self代表被观察对象

        第二个self代表观察者

        KeyPath 实例变量路径

        options 可选项, 可以添加多个, 中间用|分开

        context 上下文, 可以用来传值

        [self addObserver:self forKeyPath:@"name" options:(NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld) context:nil];
        //初始化可变数组
        self.array = [@[] mutableCopy];
        //添加观察者
        [self addObserver:self forKeyPath:@"array" options:(NSKeyValueObservingOptionNew) context:nil];

      2. 接收KVO的事件

    - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSString *,id> *)change context:(void *)context {
        NSLog(@"object = %@, keyPath = %@ change = %@", object, keyPath, change);
    }
    - (IBAction)kvo_fire:(id)sender {
        self.name = @"568";
    }
    
    - (IBAction)array_KVO_fire:(id)sender {
    //    [self.array addObject:@"123"];
        [[self mutableArrayValueForKey:@"array"] addObject:@"OK"];
    }
    
    - (void)dealloc
    {
        //3. 移除观察者
        [self removeObserver:self forKeyPath:@"name"];
        [self removeObserver:self forKeyPath:@"array"];
    }

     

     

  • 相关阅读:
    usually study notebook
    (转)轻松掌握shell编程中数组的常见用法及示例
    (转)python学习链接
    (转)Python作业day2购物车
    (转)python 列表与元组的操作简介
    (转)总结Linux的chattr与lsattr命令详解
    mysql特殊语句学习
    PHP位操作符
    html5中script的async属性
    jquery资源
  • 原文地址:https://www.cnblogs.com/OrangesChen/p/5071445.html
Copyright © 2011-2022 走看看