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 ;
}

IOS的KVC的更多相关文章

  1. iOS:KVO/KVC 的概述与使用

    iOS:KVO/KVC 的概述与使用       KVO   APP开发技术QQ群:347072638 一,概述 KVO,即:Key-Value Observing,它提供一种机制,当指定的对象的属性 ...

  2. 【原】iOS中KVC和KVO的区别

    在iOS开发中经常会看到KVC和KVO这两个概念,比较可能混淆,特地区分一下 KVC(Key Value Coding) 1> 概述 KVC:Key Value Coding,键值编码,是一种间 ...

  3. iOS 中KVC、KVO、NSNotification、delegate 总结及区别-b

    1.KVC,即是指 NSKeyValueCoding,一个非正式的Protocol,提供一种机制来间接访问对象的属性.而不是通过调用Setter.Getter方法访问.KVO 就是基于 KVC 实现的 ...

  4. iOS开发-KVC和KVO的理解

    KVC和KVO看起来很专业,其实用起来还是比较简单的,KVC(Key-value coding)可以理解为键值对编码,如果对象的基本类型,那么键值对编码实际上和get,set方法没有区别,如果是属性是 ...

  5. ios使用kvc机制简化对json的解析

    在 ios开发中,我们经常需要对服务器的传回来的json进行解析,特别是对哪些字段特别多的就会又烦躁的情绪.tmd都是一样的东西,要为每个property赋值,真是累人啊.举个简单的例子吧.服务器会过 ...

  6. iOS 用KVC设置结构体

    iOS 用KVC设置结构体 在Fundation中KVC提供的键值路径只能访问对象,不能访问结构体.这很不面向对象. 执行下面的语句将会报错: [self setValue:@() forKeyPat ...

  7. iOS设计模式 —— KVC

    刨根问底KVC KVC 全称 key valued coding 键值编码 反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性 ...

  8. 【iOS】KVC 与 KVO

    一.KVC与KVO *"KVC":key value Coding(键值编码) *目的:间接的改动或获取对象的属性,减少程序(类与类)之间的耦合度. *"KVO" ...

  9. IOS之KVC和KVO(未完待续)

    *:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } ...

  10. IOS之KVC机制(Object-C篇)

    开发环境:xcode7 一.KVC概述 1.KVC是KeyValueCoding的简称,它是一种可以直接通过类属性的名字来作key,再绑定key的值来访问类属性的机制,而不再通过利用@property ...

随机推荐

  1. python混账的编码问题解决之道

    下面的代码作用是修改文件的编码格式.代码很简单,但是也很牛逼(在我看来),这是在segment上找到的解决办法,废话不多说,直接上代码. import codecsdef ReadFile(fileP ...

  2. web之Respone

    服务器处理请求的流程:  服务器每次收到请求时,都会为这个请求开辟一个新的线程.  服务器会把客户端的请求数据封装到request对象中,request就是请求数据的载体!(袋子)  服务器还会创建r ...

  3. python 、mmap 实现内存数据共享

    import mmap mmap_file = None ##从内存中读取信息, def read_mmap_info(): global mmap_file mmap_file.seek(0) ## ...

  4. python之smtplib发邮件

    第一版: 认证发信,不支持附件 #!/usr/bin/env python # --------------------------------------- # author : Geng Jie ...

  5. 快速找到Office应用程序安装路径

    p{ font-size: 15px; } .alexrootdiv>div{ background: #eeeeee; border: 1px solid #aaa; width: 99%; ...

  6. Debian 8开启sftp服务

    看到某云的CDN居然是使用ftp这种早该淘汰的协议,不禁有些吐槽.ftp曾经作为互联网上最重要的协议,但漫长使用过程中体现出的各种缺点,已不适合再使用.其中最致命的问题就是明文传输用户密码.建议使用这 ...

  7. Kubernetes环境下的各种调试方法

    作者:Jack47 转载请保留作者和原文出处 欢迎关注我的微信公众账号程序员杰克,两边的文章会同步,也可以添加我的RSS订阅源. 本文介绍在Kubernetes环境下的调试方法,希望对读者有用.如果关 ...

  8. 事务隔离级别与传播机制,spring+mybatis+atomikos实现分布式事务管理

    1.事务的定义:事务是指多个操作单元组成的合集,多个单元操作是整体不可分割的,要么都操作不成功,要么都成功.其必须遵循四个原则(ACID). 原子性(Atomicity):即事务是不可分割的最小工作单 ...

  9. 分离你的spring配置文件,让结构更清晰

    前言 接着上一篇的,这次框架的改变也成功分离了spring的配置文件. 以前,spring的配置文件从一开始的一点,到后面的逐渐变多,慢慢的,在一个spring的配置文件中就包含了好几块不同的bean ...

  10. dubbo+zipkin调用链监控

    分布式环境下,对于线上出现问题往往比单体应用要复杂的多,原因是前端的一个请求可能对应后端多个系统的多个请求,错综复杂. 对于快速问题定位,我们一般希望是这样的: 从下到下关键节点的日志,入参,出差,异 ...