zoukankan      html  css  js  c++  java
  • iOS-KVC详解

    定义:(Key-Value-Coding)键值编码(间接访问对象属性的机制,以字符串的形式向对象发送消息)

    一种使用字符串而不是访问器去访问一个对象实例变量的机制,使用这个机制不需要调用set或者get方法来访问成员变量,它是通过setValue:forKey:和valueForKey:方法。

    案例

    简单路径:对对象的属性进行赋值和取值

    复杂路径:对对象属性的属性进行赋值和取值

    KVC 相当于Set和Get方法(键值配对),能够对对象的属性进行赋值和取值

    People * p1 = [[People alloc] init];
    p1.car.name = @"自行车";
    //赋值
    //简单路径
    [p1 setValue:@"刘备" forKey:@"_name"];
    //复杂路径
    [p1 setValue:@"三轮车" forKeyPath:@"_car.name"];
    //取值
    NSString * name = [p1 valueForKey:@"_name"];

    KVC 只能对_name进行取值和赋值(_name和name都存在)

    Man * man = [[Man alloc] init];
    [man setValue:@"亚当" forKey:@"name"];
    NSLog(@"01%@",man.description);//此时只输出_name
    [man setValue:@"女娲" forKey:@"_name"];
    NSLog(@"02%@",man.description);//此时只输出_name

    如果没有_name的属性,但是有name这个属性的情况下,可以通过KVC对实例变量_name进行赋值和取值

    Woman * woman = [[Woman alloc] init];
    [woman  setValue:@"夏娃" forKey:@"name"];
     NSLog(@"%@",woman.description);

    总结: 实例变量(属性)

    /*
    规则:
    赋值:
    1.先找set方法,如果没有呢?就找_name
    2.如果没有_name,找name
    3.如果没有name,那么就会崩溃
    取值:
    1.先找get, 如果没有get 就找_name;
    2.如果没有_name,找name
    3.如果没有name,就会崩溃
    */

    缺点如果key写错时,编译时不会报错,运行时会报错

     

     

  • 相关阅读:
    Oracle 恢复[rman全备份集+当期归档日志]
    将ping结果输出到txt文件
    诗经 硕鼠 注释
    DIV里Table的宽度设置为100%后页面出现滚动条的解决办法;DIV下移的解决办法 IE 和 FireFox 都通过
    2007春节上海南站买火车票实录
    GG和baidu网络广告真的那么好做吗菜鸟不要被人忽悠了。做站长两个月总结
    iframe 自适应高度 IE Firefox 通过
    飘云QQ宣布终止后续开发 称不懂游戏规则玩不起
    我的小站:诗词在线 http://www.chinapoesy.com 欢迎大家测试速度。特别是网通的。
    丑奴儿欣赏 辛弃疾 诗词在线
  • 原文地址:https://www.cnblogs.com/StevenHuSir/p/iOC_KVC.html
Copyright © 2011-2022 走看看