KVC作用

KVC类似于java中的反射,它是通过一个字符串 key 来获取和设置对应类中成员属性的值
而key就是用来遍历某一个类,去查找类内部是否有与key同名的成员属性 所以对于KVC来说,成员属性无私有 共有之分,只要在类中,只要能找到相对应的就可以设置值 作用:
1. 给私有的成员属性赋值
2. 系统底层的给成员属性赋值都是采用KVC

演示代码

 #import <Foundation/Foundation.h>
#import "Person.h"
int main(int argc, const char * argv[]) {
@autoreleasepool { // // 直接为对象的属性赋值
// Person *p1 = [[Person alloc] init];
// p1.name = @"张三";
//
// Dog *chihuahua = [[Dog alloc] init];
// chihuahua.name = @"吉娃娃";
// p1.dog = chihuahua;
//
// //NSLog(@"%@ --- %@", p1.name, p1.dog.name);
//
//
//
//
// // 通过kvc的方式为对象赋值
// Dog *husky = [[Dog alloc] init];
// husky.name = @"哈士奇";
//
//
// [p1 setValue:@"李四" forKeyPath:@"name"];
// [p1 setValue:@10 forKeyPath:@"age"];
// [p1 setValue:husky forKeyPath:@"dog"];
//
//
// NSLog(@"%@---%d", p1.name, p1.age);
// NSLog(@"%@", p1.dog.name); // //-----------------------------------
// Person *p1 = [[Person alloc] init];
//
// NSString *value = @"husky@yahoo.com";
//
// NSString *property = @"email";
//
//
// [p1 setValue:value forKeyPath:property];
//
// NSLog(@"%@", p1.name);
//
// NSLog(@"%@", p1.email); //------------------------------
// Person *p1 = [[Person alloc] init];
// Dog *d = [[Dog alloc] init];
//
// [p1 setValue:@"rzc" forKeyPath:@"name"];
// [p1 setValue:@"rzc@yahoo.com" forKeyPath:@"email"];
// [p1 setValue:@18 forKeyPath:@"age"];
// [p1 setValue:d forKeyPath:@"dog"];
//
// // @"dog.name" 这个就叫做keyPath 或者叫 "属性的路径"
// [p1 setValue:@"哈士猫" forKeyPath:@"dog.name"];
// NSLog(@"%@---%d---%@--%@",p1.name,p1.age, p1.email, p1.dog.name); // NSDictionary *bz = @{
// @"name" : @"任智超",
// @"age" : @28,
// @"email" : @"rzc0714@163.com",
// @"dog" : @{@"name" : @"加肥猫"}
// };
//
// [p1 setValuesForKeysWithDictionary:bz];
// NSDictionary *dogDict = (NSDictionary *)p1.dog;
// NSLog(@"%@---%d---%@--%@",p1.name,p1.age, p1.email, dogDict[@"name"]); //---------------------------------------------------
// Person *p1 = [[Person alloc] init];
// p1.name = @"张三";
//
// Dog *chihuahua = [[Dog alloc] init];
// chihuahua.name = @"吉娃娃";
// p1.dog = chihuahua;
//
// NSString *name = [p1 valueForKeyPath:@"name"];
// NSString *dogName = [p1 valueForKeyPath:@"dog.name"];
//
// NSLog(@"%@----%@", name, dogName); //------------把对象转成字典---------------------------------------
Person *p1 = [[Person alloc] init];
p1.name = @"张三";
p1.age = ;
p1.email = @"zs@yahoo.com"; Dog *chihuahua = [[Dog alloc] init];
chihuahua.name = @"吉娃娃";
p1.dog = chihuahua; // 把对象转成字典
NSDictionary *dict = [p1 dictionaryWithValuesForKeys:@[@"name", @"age", @"email", @"dog"]]; NSLog(@"%@", dict); NSLog(@"%@", [dict[@"dog"] class]);
NSLog(@"%@", [dict[@"dog"] name]); }
return ;
}

最新文章

  1. 返回顶部demo
  2. Quartz.NET总结(三)Quartz 配置
  3. ios基础篇(十一)——UINavgationController的使用(二)页面切换
  4. 文件上传\&quot;&gt;将在3秒钟后返回前页
  5. hudson安装
  6. P1091 合唱队形
  7. (转)js一道比较考验的题目
  8. 8张图带你深入理解Java
  9. lintcode:最大子数组差
  10. 【ASP.NET】编程点滴 :ASP.NET身份验证
  11. Lua从入门到精通
  12. win2008远程桌面卡顿和上传慢的解决方法
  13. 通过udl文件得到连接字符串
  14. 全局唯一ID发号器的几个思路
  15. hbase snapshot 表备份/恢复
  16. Spring源码工程导入Eclsipse缺少两个jar文件
  17. SSL及使用openssl实现CA
  18. Airtest Project的探索和使用
  19. (四)github之Git的初始设置
  20. JavaScript 对象的使用

热门文章

  1. 【Unity游戏开发】浅谈 NGUI 中的 UIRoot、UIPanel、UICamera 组件
  2. iOS开发之计算文字尺寸
  3. XML配置文件的命名空间与Spring配置文件中的头
  4. 解决虚拟机vmware安装64位系统“此主机支持 Intel VT-x,但 Intel VT-x 处于禁用状态”的问题
  5. Legendary Items-微软实习生笔试第一题
  6. centos 6.5 搭建JSP运行环境
  7. ReactJS入门3:组件的生命周期
  8. MyBetis3.2框架技术
  9. Xcode的Architectures、Valid Architectures和Build Active Architecture Only属性(原创)
  10. jquery如何设置html众标签中的值