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. windows phone 8.1开发SQlite数据库操作详解

    原文出自:http://www.bcmeng.com/windows-phone-sqlite1/ 本文小梦将和大家分享WP8.1中SQlite数据库的基本操作:(最后有整个示例的源码)(希望能通过本 ...

  2. POP3是收邮件的协议,SMTP是发邮件的协议,IMAP是一种邮箱通信协议。

    我也是第一次接触这种服务,是因为我自己在做一个小小的自动推送天气情况到自己邮箱.所以才碰到这个的/ 看一下标题,我们可以先这样理解. POP3(Post Office Protocol - Versi ...

  3. iOS开发之NSOperation & NSOperationQueue

    1.简介 (1) NSOperationQueue(操作队列)是由GCD提供的队列模型的Cocoa抽象,是一套Objective-C的API,为了使并发(多线程)编程变得更加简单,但效率比GCD略低. ...

  4. 用C语言写的万年历---亲手写的。好累哦

    #include <stdio.h>#include <stdlib.h>#include <string.h>#define str "   SUN   ...

  5. 模块“XXX.dll”加载失败

    具体问题:模块“XXX.dll”加载失败 请确保该二进制存储在指定的路径中,或者调试它以检查该二进制或相关的.DLL文件是否有问题  找不到指定的模块. 1.在安装C++软件的时候,有时候安装失败提示 ...

  6. 通过哨兵机制实现Redis主从配置以及java调用

    Redis版本:3.0.7 操作环境:Linux 一.redis 主从配置的作用是什么 redis主从配置,配置master 只能为写,slave只能为读,在客户端对poolconnect请求时候,, ...

  7. Weblogic虚拟目录

    p.MsoNormal,li.MsoNormal,div.MsoNormal { margin: 0cm; margin-bottom: .0001pt; text-align: justify; f ...

  8. 如何使用LightningChart拖放功能进行数据转移 ?

    本文主要介绍如何使用LightningChart扩展拖放功能为所有图表组件创建图表,如:系列,标题,轴线等等.支持用鼠标放置自定义对象到另一个图表中,如:可以添加或修改JSON/CSV或其他格式的数据 ...

  9. 浓缩的才是精华:浅析GIF格式图片的存储和压缩

    成文迪, 在Web前端摸爬滚打的码农一枚,对技术充满热情的菜鸟,致力为手Q的建设添砖加瓦. GIF格式的历史 GIF(Graphics Interchange Format)原义是"图像互换 ...

  10. 测试开发Python培训:实现屌丝的黄色图片收藏愿望(小插曲)

    男学员在学习python的自动化过程中对于爬虫很感兴趣,有些学员就想能收藏一些情色图片,供自己欣赏.作为讲师只能是满足愿望,帮助大家实现对美的追求,http://wanimal.lofter.com/ ...