开发环境:xcode7

一.KVC概述

  1.KVC是KeyValueCoding的简称,它是一种可以直接通过类属性的名字来作key,再绑定key的值来访问类属性的机制,而不再通过利用@property提供的setter和getter方法来访问;

  2.KVC支持类对象和内建的基本数据类型;

  3.KVC的关键方法定义在NSKeyValueCoding.h文件里,常用的方法:

  修改值:

  - (void)setValue:(nullable id)value forKey:(NSString *)key;

  - (void)setValue:(nullable id)value forKeyPath:(NSString *)keyPath;

  获取值:

  - (nullable id)valueForKey:(NSString *)key;

  - (nullable id)valueForKeyPath:(NSString *)keyPath;

二.演示

  1.新建一个工程

  2.新建一个类Person类

Persion.h里为Person类添加姓名和年龄字段,不用@property处理为属性,提供setter和getter方法

#import <Foundation/Foundation.h>

@interface Person : NSObject {
NSString *name;
int age;
} @end

Person.m默认即可,不做任何添加

#import "Person.h"

@implementation Person

@end

  3.在main.m文件中利用KVC,我们来实现对Person类中name和age实例变量的访问

#import <Foundation/Foundation.h>
#import "Person.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
Person *person = [[Person alloc] init];
[person setValue:@"damon" forKey:@"name"];
[person setValue:@"" forKey:@"age"];
NSString *name = [person valueForKey:@"name"];
int age = [[person valueForKey:@"age"] intValue];
NSLog(@"name:%@",name);
NSLog(@"age:%d",age);
}
return ;
}

  4.新建Pet类,让Person类拥有一个Pet实例

  Pet.h文件

#import <Foundation/Foundation.h>

@interface Pet : NSObject {
NSString *name;
} @end

  Pet.m文件默认,不做任何修改

  更新Person.h文件,Person.m文件不做任何修改

#import <Foundation/Foundation.h>
@class Pet;
@interface Person : NSObject {
NSString *name;
int age;
Pet *myPet;
} @end

  5.在main.m文件中,利用KVC访问myPet的name实例变量

#import <Foundation/Foundation.h>
#import "Person.h"
#import "Pet.h" int main(int argc, const char * argv[]) {
@autoreleasepool {
Person *person = [[Person alloc] init];
[person setValue:@"damon" forKey:@"name"];
[person setValue:@"" forKey:@"age"];
NSString *name = [person valueForKey:@"name"];
int age = [[person valueForKey:@"age"] intValue];
NSLog(@"name:%@",name);
NSLog(@"age:%d",age); Pet *pet = [[Pet alloc] init];
[pet setValue:@"旺旺" forKey:@"name"];
[person setValue:pet forKey:@"myPet"];
NSString *myPetName = [person valueForKeyPath:@"myPet.name"];
NSLog(@"myPetName:%@",myPetName);
}
return ;
}

三.总结

  KVC这种比编码方式使用起来非常简单,结合KVO,很适用于当模型数据发生改变时,引发的UI改变的情况。

IOS之KVC机制(Object-C篇)的更多相关文章

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

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

  2. iOS编程——Objective-C KVO/KVC机制[转]

    这两天在看和这个相关的的内容,全部推翻重写一个版本,这是公司内做技术分享的文档总结,对结构.条理做了更清晰的调整.先找了段代码,理解下,网上看到最多的一段的关于KVC的代码 先上代码 1.     1 ...

  3. iOS编程——Objective-C KVO/KVC机制

    来源:http://blog.sina.com.cn/s/blog_b0c59541010151s0.html 这两天在看和这个相关的的内容,全部推翻重写一个版本,这是公司内做技术分享的文档总结,对结 ...

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

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

  5. iOS KVO & KVC

    键值观察:值更改时通知观察者 键值观察(Key-value observing,或简称 KVO)允许对象观察另一个对象的属性.该属性值改变时,会通知观察对象.它了解新值以及旧值:如果观察的属性为对多的 ...

  6. Android Native -- Message/Handler/Looper机制(原理篇)

    ⌈Android Native消息队列处理系列文章⌋ Android Native -- Message/Handler/Looper机制(原理篇) Android Native -- Message ...

  7. iOS 阶段学习第25天笔记(iOS沙盒机制介绍)

    iOS学习(OC语言)知识点整理 一.iOS沙盒机制介绍 1)概念: 每个ios应用都有自己的应用沙盒,应用沙盒就是文件系统目录,与其他应用放入文件 系统隔离,ios系统不允许访问 其他应用的应用沙盒 ...

  8. iOS沙盒机制介绍,Block 的介绍

    一.iOS沙盒机制介绍 (转载) 1)概念:每个ios应用都有自己的应用沙盒,应用沙盒就是文件系统目录,与其他应用放入文件 系统隔离,ios系统不允许访问 其他应用的应用沙盒,但在ios8中已经开放访 ...

  9. QF——iOS沙盒机制

    iOS沙盒机制: 什么是沙盒机制?  点击进入  点击进入 沙盒机制(SandBox)是一种安全体系,它规定了APP的所有文件数据都必须存储在这片区域.所有非代码文件的数据都保存在这片区域. 沙盒里有 ...

随机推荐

  1. hdoj 2023 求平均成绩

    求平均成绩 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submi ...

  2. Arrays.asList的源码分析

    以前一直很奇怪为什么Arrays.asList的数组不能插入新的数据,后来看了源码发现是因为内部是一个final的数组支持起来的Arraylist,下面贴入源码与分析. 1.先看Arrays的方法 我 ...

  3. Stage3D学习笔记(一):3D术语简介

    网格(Mesh) 3D中,所有可见的模型都被称作网格.网格是由3DMax等建模软件制作,定义了一个3D物体的形状.一个网格是由多个多边形组成的. 多边形(Polygon) 一个多边形是组成网格的一个最 ...

  4. 【转】C++对象内存分配问题

    原文:http://blog.csdn.net/c504665913/article/details/7797859 如果一个人自称为程序高手,却对内存一无所知,那么我可以告诉你,他一定在吹牛.用C或 ...

  5. Zmodem transfer canceled by remote side

    linux sz命令时报这个错误,看了一头雾水. 仔细看了一下发现竟然是要sz的文件名称写错了,抱着个错误和误导人呢.估计路径写错了也是这个错误.

  6. Codeforces Round #268 (Div. 1) A. 24 Game 构造

    A. 24 Game Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/468/problem/A D ...

  7. 关于Excel Networkdays方法的实现

    最近一个程序要求excel输出的日期差为Networkdays. 在网上找了下,没有找到很好的具体实现方法. 要说明的是,微软的Microsoft.Office.Interop.Excel已经实现的N ...

  8. 理解class.forName()

    使用jdbc方式连接数据库时会使用一句代码Class.forName(String className).这句话是什么意思呢?首先说一点Class.forName(String className)这 ...

  9. Paginator

    Paginator There are several ways to paginate items. The simplest is by using the paginate method on ...

  10. Navigation Bar上的返回按钮文本颜色,箭头颜色以及导航栏按钮的颜色

    自从IOS7后UINavigationBar的一些属性的行为发生了变化.你可以在下图看到: 现在,如果你要修改它们的颜色,用下面的代码: self.navigationController.navig ...