首先,创建两个类。person类和book类。如图:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" height="232" width="442">

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" height="230" width="495">

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

接着代码来将Main.h中

//
// Created by 胡双飞 on 15/8/15.
// Copyright (c) 2015年 HSF. All rights reserved.
// /** (键/值编码)
* KVC的基本用法:以字符串的形式(关注属性的key)向对象发送消息,查找是否有存在setter
* getter方法,假设不存在,查找_key或key的实例变量,能够设置值。 * 同一时候。通过kvc,也能够获取不存在getter方法的对象值。不须要对象指针
* 指向直接訪问。(能够设置对象属性的值。也能够获取对象属性的值)
* 以下的数字和代码中的数字标识的代码样例一致。 * 1.通过 setValue: forkey: 来设置对象的值(单个设置).假设是int、float、BOOL等基本
* 数据类型时。要封装简单能够用 @ 来搞定。
*
* 2.通过 valueForKey: 获取对象的值。
*
* 3.通过 valueForKeyPath: 能够通过 英文的点 . 訪问到路径指向的值。
*
* 4.通过valueForKeyPath:能够訪问存储到数组中的每一个对象的值,接受时也要用NSArray来接受
*
* 5.通过setValue: forKeyPath: 也能够将訪问到路径上的实例对象设值
*
* 6.通过dictionaryWithValuesForKeys:(NSArray *)keys 能够通过多个key获取属性值,
* 并以key-value形式存放到字典中。 *
* 7.setValuesForKeysWithDictionary:能够通过字典直接给多个属性设值,经常使用字典转模型中
*
*/ #import <Foundation/Foundation.h>
#import "Person.h"
#import "Book.h"
//kvc和数组的基本关系
void kvcWithArray();
int main(int argc, const char* argv[])
{
@autoreleasepool
{
//建立一个书类
Book* book = [[Book alloc] init];
book.name = @"西游记";
//建立人
Person* person = [[Person alloc] init];
person.name = @"pig";
person.book = book; //person.age = 5;
//1.当是int,float,BOOL基本数据类型时。要进行封装.
[person setValue:@5 forKey:@"age"];
NSLog(@"%zd", person.age); //2.通过valueForKey:取值将值从对象解析成NSInterager类型
NSInteger age = [[person valueForKey:@"age"] integerValue];
NSLog(@"%ld", age); //3.valueForKeyPath基本运算 (方式一)
NSString* bn = [person valueForKeyPath:@"book.name"];
NSLog(@"%@", bn);
//方式二
[person.book valueForKeyPath:@"name"];
NSLog(@"%@", person.book.name); //4.和数组的关系
kvcWithArray(); //5.通过setValue: forKeyPath: 方法来设置值。
Person* pn = [[Person alloc] init];
[pn setValue:@"xishi" forKeyPath:@"name"];
[pn setValue:@"25" forKeyPath:@"age"];
[pn setValue:@"春秋战国" forKeyPath:@"book.name"]; //取值
NSString* nameKeyPath = [pn valueForKeyPath:@"name"];
NSInteger ageKeyPath = [[pn valueForKeyPath:@"age"] integerValue];
NSString* bookKeyPath = [person valueForKeyPath:@"book.name"];
NSLog(@"名字 %@", nameKeyPath);
NSLog(@"年龄 %zd", ageKeyPath);
NSLog(@"书名字 %@", bookKeyPath); //6.dictionaryWithValuesForKeys: 的使用,能够将数据直接放到字典里。 @[ @"name" ,还能够放其它值]
NSDictionary* dict = [pn dictionaryWithValuesForKeys:@[ @"age", @"name" ]];
NSLog(@"-------%@", dict); //7.setValuesForKeysWithDictionary:能够通过字典直接给多个属性设值。 Person* vkd = [[Person alloc] init];
[vkd setValuesForKeysWithDictionary:dict];
NSLog(@"名字 %@", vkd.name);
NSLog(@"年龄 %zd", vkd.age);
NSLog(@"书名字 %@", vkd.book.name);
/*
2015-08-17 11:20:42.325 02-KVC[656:33512] 名字 xishi
2015-08-17 11:20:42.325 02-KVC[656:33512] 年龄 25
2015-08-17 11:20:42.326 02-KVC[656:33512] 书名字 (null)
*/
//这里输出结果中书名字为空,原因是我在第六中的字典中没有赋值。
//(1)用kvc时,能够少值,不能多值,假设多值会出现程序崩溃。 //(2)在字典转模型时,
// 在模型类的.m文件,放上-(void)setValue:(id)value forUndefinedKey:(NSString *)key{}
// 方式来处理,当你的值多时就会来到这种方法。而且能够通过获取多值的属性.
}
return 0;
} void kvcWithArray()
{
Person* p = [[Person alloc] init];
p.name = @"tangsen";
p.age = 30; Person* p1 = [[Person alloc] init];
p1.name = @"sunwukong";
p1.age = 40; Person* p2 = [[Person alloc] init];
p2.name = @"shaheshag";
p2.age = 20; // 笨的方法将人名加入到数组中。 // NSMutableArray *names = [NSMutableArray array];
// for (Person *person in persons) {
// [names addObject:person.name];
// } //(1)创建的三个人加到数组中.
NSArray* persons = @[ p, p1, p2 ]; // 通过 valueForKeyPath, 取出persons数组中全部person对象的name属性值
NSArray* names = [persons valueForKeyPath:@"name"]; NSLog(@"%@", names);
}

KVC基本使用的更多相关文章

  1. Objective-C之KVC、KVO

    1,KVC(键值编码)  Key Value Coding 1.1在C#中,可以通过字符串反射来获取对象,从而对对象的属性进行读写,Object-C中有同样的实现,通过字符串(属性名词)对对象的属性进 ...

  2. KVC 和 KVO

    KVC 键值编码    全称是Key-value coding,翻译成键值编码.它提供了一种使用字符串而不是访问器方法去访问一个对象实例变量的机制.        1.通过key(成员变量的名称)设置 ...

  3. 11. KVC And KVO

    1. KVC And KVO  的认识 KVC/KVO是观察者模式的一种实现  KVC全称是Key-value coding,翻译成键值编码.顾名思义,在某种程度上跟map的关系匪浅.它提供了一种使用 ...

  4. iOS开发系列--Objective-C之KVC、KVO

    概述 由于ObjC主要基于Smalltalk进行设计,因此它有很多类似于Ruby.Python的动态特性,例如动态类型.动态加载.动态绑定等.今天我们着重介绍ObjC中的键值编码(KVC).键值监听( ...

  5. IOS学习之初识KVC

    什么是kvc? kvc (key-value coding )键值编码,是ios 提供的一种通过key间接的来访问对象属性的一直方式. 哪些类支持kvc操作? kvc的操作方法由NSKeyValueC ...

  6. KVC & KVO

    KVC和KVO看上去又是两个挺牛的单词简写,KVC是Key-Value Coding的简写,是键值编码的意思.KVO是Key-Value  Observing的简写,是键值观察的意思.那么我们能拿KV ...

  7. iOS - 详细理解KVC与KVO

    详细理解KVC与KVO 在面试的时候,KVC与KVO有些时候还是会问到的,并且他们都是Objective C的关键概念,在这里我们先做一个简单地介绍: (一)KVC: KVC即指:NSKeyValue ...

  8. KVC&&&KVO

    KVC 什么是KVC --->What KVC指的就是NSKeyValueCoding非正式协议. KVC是一种间接地访问对象的属性的机制. 这种间接表现在通过字符串来标识属性,而不是通过调用存 ...

  9. OC KVC

    OC KVC KVC 全称 key valued coding 键值编码 在说KVC之前应该简单的了解一下反射机制 反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法. 对于任意 ...

  10. IOS开发之Bug--使用KVC的易错情况

    1.其实某些角度而言KVC是一个破坏封装又暴力的做法,而我已经两次因为KVC而导致应用程序出现闪退的情况. 场景:1.使用KVC修改某一个UIView的属性,比如width.    2.在viewWi ...

随机推荐

  1. hdu 5698(杨辉三角的性质+逆元)

    ---恢复内容开始--- 瞬间移动 Accepts: 1018 Submissions: 3620 Time Limit: 4000/2000 MS (Java/Others) Memory Limi ...

  2. Dialog和软键盘在屏幕上的并存问题:

    最近做添加门店,门店昵称自动根据文字变化去搜索后台数据,但是一搜索软键盘就关闭了,感觉用户体验不太好.一开始根本不知道啥问题,找了半天才发现是网络请求dialog加载导致软件盘隐藏的,后面直接把dia ...

  3. JS-JavaScript String 对象-string对象方法2: indexOf()、lastIndexOf()、charAt()

    1.indexOf():可返回某个指定的字符串值在字符串中首次出现的位置. 1).语法:string.indexOf(searchvalue,start):     searchvalue:必需.规定 ...

  4. CSS定位与布局:浮动

    浮动的特点   浮动(float)属性提出的作用是实现文字的环绕效果,一个元素浮动后,会脱离普通流.主要的特点如下: 浮动的元素会向左或者向右移动直到它的外边缘接触容器框(containing blo ...

  5. Jenkins配置git进行构建失败:Error cloning remote repo 'origin'的解决思路

    说明:这个没有实际的解决方法,只提供一个思路去解决. 操作系统:windows 背景:在配置的节点之后,由于是windows的系统,运行git克隆地址,使用的是SSH协议地址.出现如下的错误: Err ...

  6. shell实践--shell内嵌指令实现查看上线时间

    实践小点子: 1. 做一个shell 内嵌指令例如:ls,cd,pwd这样     就实现查看上线多久:   解决办法有两种: 1) 利用脚本,如新指令为look;利用别名的方法,将look.sh脚本 ...

  7. node.js中的exports和module.exports

    不同的编程语言都有各自的代码组织和复用的方式,如.net.php中的命名空间,python中的import,ruby中的module等,来避免命名空间污染.一直都没搞清楚node中的exports和m ...

  8. ssh配置含义解释

    ssh包括客户端配置(ssh_config)和服务端配置(sshd_config) 一.客户端配置ssh_config,客户端软件有SecureCRT.putty.Xshell等 “#”表示注释,虽然 ...

  9. Android蓝牙开发教程(三)——蓝牙设备相互通讯

    在上一篇中已经介绍如何连接我们搜索到的蓝牙设备,如果你还没阅读过,建议先看看上一篇文章Android蓝牙开发教程(二)——连接蓝牙设备 在上一篇文章中,无论是自动连接还是被动连接,连接成功后,都是将获 ...

  10. 2016.11.14 MIT challenge之课程总览

    Degree Chartshttp://catalog.mit.edu/degree-charts/computer-science-engineering-course-6-3/ MIT Chall ...