• IOS-KVO&KVC


    KVC(key value coding)

    我们一般是通过调用set方法或属性的点语法来直接更改对象的状态,即对象的属性值,比如[stu setAge:10];  stu.age = 9;
    lKVC,它是一种间接更改对象状态的方式,其实现方法是使用字符串来描述对象需要更改的属性。KVC中的基本调用包括valueForKey:和setValue:ForKey:,以字符串的形式向对象发送消息
    l这里以Student和Card为例子
     
    KVC可以对对象进行批量更改
    l例如,同时获取Student的age和name

    NSArray *keys = [NSArray arrayWithObjects:@"name", @"age", nil];

    NSDictionary *dict = [student dictionaryWithValuesForKeys:keys];

    l同时设置Student的age和name

    NSArray *keys = [NSArray arrayWithObjects:@"name", @"age", nil];

    NSArray *values = [NSArray arrayWithObjects:@"MJ", [NSNumber numberWithInt:16], nil];

    NSDictionary *dict = [NSDictionary dictionaryWithObjects:values forKeys:keys];

    [student setValuesForKeysWithDictionary:dict];

    键路径(key path)

    l除了通过键设置值外,KVC还支持键路径,像文件系统路径一样,其实就是属性链式访问
    l比如,利用键路径设置Student对象中Card对象的no

    [student setValue:@"12345" forKeyPath:@"card.no"];

    l获取Student对象中Card对象的no

    [student valueForKeyPath:@"card.no"];

    KVO(key value observing)

    lKVO是一种非常重要的机制,它允许监听对象的属性的变化
    l注册监听器

    -(void)addObserver:(NSObject *)anObserver forKeyPath:(NSString *)keyPath options:(NSKeyValueObservingOptions)options context:(void *)context

    anObserver :监听器对象

    keyPath :监听的属性

    options :决定了当属性改变时,要传递什么数据给监听器

    l监听器需要实现监听方法

    -(void) observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object
    change:(NSDictionary *)change context:(void *)context

    keyPath :监听的属性

    object :谁的属性改变了

    change :属性改变时传递过来的信息(取决于添加监听器时的options参数)

    l移除监听器

    -(void)removeObserver:(NSObject *)observer forKeyPath:(NSString *)keyPath

     
  • 相关阅读:
    编程填空:第i位替换
    poj 2192 Zipper
    3:拦截导弹
    vijos 1006 晴天小猪历险记之Hill——数字三角形的终极变化
    数字三角形【汇总】
    codevs 1576 最长严格上升子序列
    3299 有序数组合并求第K大问题
    输出数组第k大的元素
    Java线程同步的Monitor机制(Lock配合Condition)
    堆排序Heapsort的Java和C代码
  • 原文地址:https://www.cnblogs.com/mcj-coding/p/3562585.html
Copyright © 2020-2023  润新知