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写错时,编译时不会报错,运行时会报错

     

     

  • 相关阅读:
    Linux 服务器注意事项
    维基逃离MySQL 力挺开源数据库 MariaDB
    服务器性能优化
    1 Nginx + 12 Tomcat +2DB 实现2个程序负载均衡
    服务器虚拟化技术 对比简介
    vSphere虚拟系统 添加虚拟服务器
    IIS停止服务 报错Connections_Refused
    windows服务器 IIS FTP服务
    tomcat solr服务无法搜索中文
    查看php相关信息
  • 原文地址:https://www.cnblogs.com/StevenHuSir/p/iOC_KVC.html
Copyright © 2011-2022 走看看