zoukankan      html  css  js  c++  java
  • IOS的KVC

    KVC作用

    KVC类似于java中的反射,它是通过一个字符串 key 来获取和设置对应类中成员属性的值
    而key就是用来遍历某一个类,去查找类内部是否有与key同名的成员属性

    所以对于KVC来说,成员属性无私有 共有之分,只要在类中,只要能找到相对应的就可以设置值

    作用:
    1. 给私有的成员属性赋值
    2. 系统底层的给成员属性赋值都是采用KVC

    演示代码

      1 #import <Foundation/Foundation.h>
      2 #import "Person.h"
      3 int main(int argc, const char * argv[]) {
      4     @autoreleasepool {
      5        
      6 //        // 直接为对象的属性赋值
      7 //        Person *p1 = [[Person alloc] init];
      8 //        p1.name = @"张三";
      9 //        
     10 //        Dog *chihuahua = [[Dog alloc] init];
     11 //        chihuahua.name = @"吉娃娃";
     12 //        p1.dog = chihuahua;
     13 //        
     14 //        //NSLog(@"%@ --- %@", p1.name, p1.dog.name);
     15 //        
     16 //        
     17 //        
     18 //        
     19 //        // 通过kvc的方式为对象赋值
     20 //        Dog *husky = [[Dog alloc] init];
     21 //        husky.name = @"哈士奇";
     22 //        
     23 //        
     24 //        [p1 setValue:@"李四" forKeyPath:@"name"];
     25 //        [p1 setValue:@10 forKeyPath:@"age"];
     26 //        [p1 setValue:husky forKeyPath:@"dog"];
     27 //        
     28 //        
     29 //        NSLog(@"%@---%d", p1.name, p1.age);
     30 //        NSLog(@"%@", p1.dog.name);
     31         
     32         
     33 //        //-----------------------------------
     34 //        Person *p1 = [[Person alloc] init];
     35 //        
     36 //        NSString *value = @"husky@yahoo.com";
     37 //        
     38 //        NSString *property = @"email";
     39 //        
     40 //        
     41 //        [p1 setValue:value forKeyPath:property];
     42 //        
     43 //        NSLog(@"%@", p1.name);
     44 //    
     45 //        NSLog(@"%@", p1.email);
     46         
     47         
     48         //------------------------------
     49 //        Person *p1 = [[Person alloc] init];
     50 //        Dog *d = [[Dog alloc] init];
     51 //        
     52 //        [p1 setValue:@"rzc" forKeyPath:@"name"];
     53 //        [p1 setValue:@"rzc@yahoo.com" forKeyPath:@"email"];
     54 //         [p1 setValue:@18 forKeyPath:@"age"];
     55 //        [p1 setValue:d forKeyPath:@"dog"];
     56 //        
     57 //        // @"dog.name" 这个就叫做keyPath 或者叫 "属性的路径"
     58 //        [p1 setValue:@"哈士猫" forKeyPath:@"dog.name"];
     59 //         NSLog(@"%@---%d---%@--%@",p1.name,p1.age, p1.email, p1.dog.name);
     60         
     61         
     62 //        NSDictionary *bz = @{
     63 //                             @"name" : @"任智超",
     64 //                             @"age" : @28,
     65 //                             @"email" : @"rzc0714@163.com",
     66 //                             @"dog" : @{@"name" : @"加肥猫"}
     67 //                             };
     68 //        
     69 //        [p1 setValuesForKeysWithDictionary:bz];
     70 //        NSDictionary *dogDict = (NSDictionary *)p1.dog;
     71 //        NSLog(@"%@---%d---%@--%@",p1.name,p1.age, p1.email, dogDict[@"name"]);
     72         
     73         
     74         
     75         //---------------------------------------------------
     76 //        Person *p1 = [[Person alloc] init];
     77 //        p1.name = @"张三";
     78 //        
     79 //        Dog *chihuahua = [[Dog alloc] init];
     80 //        chihuahua.name = @"吉娃娃";
     81 //        p1.dog = chihuahua;
     82 //        
     83 //        NSString *name = [p1 valueForKeyPath:@"name"];
     84 //        NSString *dogName = [p1 valueForKeyPath:@"dog.name"];
     85 //        
     86 //        NSLog(@"%@----%@", name, dogName);
     87         
     88         
     89         
     90         //------------把对象转成字典---------------------------------------
     91         Person *p1 = [[Person alloc] init];
     92         p1.name = @"张三";
     93         p1.age = 15;
     94         p1.email = @"zs@yahoo.com";
     95         
     96         Dog *chihuahua = [[Dog alloc] init];
     97         chihuahua.name = @"吉娃娃";
     98         p1.dog = chihuahua;
     99         
    100         // 把对象转成字典
    101         NSDictionary *dict = [p1 dictionaryWithValuesForKeys:@[@"name", @"age", @"email", @"dog"]];
    102 
    103         NSLog(@"%@", dict);
    104         
    105         NSLog(@"%@", [dict[@"dog"] class]);
    106         NSLog(@"%@", [dict[@"dog"] name]);
    107         
    108         
    109         
    110     }
    111     return 0;
    112 }
  • 相关阅读:
    超链接把一个值传到多个页面的方法
    jsp采用数据库连接池的方法获取数据库时间戳context.xml配置,jsp页面把时间格式化成自己需要的格式
    Myeclipse WEB工程JSP使用JNDI 数据库连接池连接Mysql数据库
    jsp页面图片显示不出来
    如何修改MyEclipse的默认编码方式
    MyEclipse8.5破解方法
    mysql创建的数据库在电脑什么位置?
    netsh winsock reset
    SQL Server(MSSQLSERVER)启动失败,提示“请求失败或服务未及时响应
    WIN7不能上网
  • 原文地址:https://www.cnblogs.com/developer-wang/p/4534572.html
Copyright © 2011-2022 走看看