zoukankan      html  css  js  c++  java
  • 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

     
  • 相关阅读:
    Tips——RN HTML两端通信
    Tips——RN如何动态地添加删除组件
    Tips——RN webview如何实现首次加载自动登录及后续定时登录
    Between Us 1 生命的起源
    获取当前工作路径和当前模块路径
    从标准输出和读入
    字符串赋值操作
    char,string和CString转换
    字符串结束标志
    Lenovo GTX960M 配置CUDA
  • 原文地址:https://www.cnblogs.com/mcj-coding/p/3562585.html
Copyright © 2011-2022 走看看