iOS KVC 概述

KVC

KVC 的基本概念 —–>What

  • KVC 是一种间接更改对象状态(或者说是属性值)的方式:key-value coding 简称 KVC.
  • 主要本质特点是采用字符串来标识对象的属性变量,并可以利用这个标识来更改对象的状态(或者说是属性值)
  • 这种间接表现在通过字符串来标识属性,?而不是通过调?用存取?方法或直接地访问实例变量的方式。
  • KVC机制不仅?支持对象,还?支持标量和结构体类型,这些?非对象的类型会被?自动的装箱和开箱。

Key & Key Path

键(Key)是?一个字符串?用来标识对象?里?面的?一个指定的属性。?一般?一个键对应对象的存取?方法或 实例变量。键必须是ASCII码,?一般以?小写字?母开始,不能包含空格。

A key path is a string of dot separated keys that is used to specify a sequence of object properties to traverse. The property of the first key in the sequence is relative to the receiver, and each subsequent key is evaluated relative to the value of the previous property.

键路径(Key Path)是?一个由点进?行分割的?一系列键组成的字符串

键路径的概念和表示:可以在对象和不同的变量名称之间用圆点分开来表示.

注意:

键路径的深度是任意的,具体取决于对象之间的关系的复杂度

KVC 基本用法

   - (void)setValue:(id)value forKey:(NSString *)key
   - (id)valueForKey:(NSString *)key
   - (id)valueForKey:(NSString *)key //以 key 作为标示符,获取其对应的属性值
   - (void)setValue:(id)value forKey:(NSString *)key //以 key 作为标示符设置其对应的属性值
   - (id)valueForUndefinedKey:(NSString *)key
   - (void)setNilValueForKey:(NSString *)key

KVC 的调用机制:

  • valueForKey: 会首先查找以参数名命名(格式为 -key 或者 isKey) 的 getter 方法,如果找到的话泽调用这个方法; 如果没有找到这样的getter 方法,它将会在对象内部寻找名称格式为_ key 或者 key 的实例变量,然后返回.
  • setValue:forKey: 的机制跟 valueForKey 相似.它会首先查找参数名的 setter 方法,如果找到的话则完成设置; 如果没有找到 setter 方法,则直接在类中找到名称格式为_ key 或者 key 的实例变量,然后将 value 赋值给它.

KVC 在集合中的使用

@avg

NSnumber *transactionAverage = [transactions valueForKeyPath:@"@avg.amount"];

@count

 NSNumber *numberOfTransactions = [transactions valueForKeyPath:@"@count"]
?;

@max

NSDate *latestDate = [transactions valueForKeyPath:@"@max.date"];

@min

NSDate *earliestDate = [transactions valueForKeyPath:@"@min.date"];

@sum

NSNumber *amountSum = [transactions valueForKeyPath:@"@sum.amount"];

使用键值和键路径的方法比较简单,我就直接用一个 KVC在集合中的使用来演示

创建一个 QYPerson 类继承于 NSObject

#import <Foundation/Foundation.h>

@class QYCourse;
@interface QYPerson : NSObject
@property (nonatomic, strong) NSString *name;
@property (nonatomic, strong) QYCourse *course;
@property (nonatomic, assign) NSInteger point;
@property (nonatomic, strong) NSArray *persons;
@end

在 main.m 函数中

int main(int argc, const char * argv[]) {
    @autoreleasepool {

        QYPerson *person = [[QYPerson alloc] init];

        QYPerson *p1 = [[QYPerson alloc] init];
        QYPerson *p2 = [[QYPerson alloc] init];
        QYPerson *p3 = [[QYPerson alloc] init];

        [p1 setValue:@"78" forKey:@"point"];
        [p2 setValue:@"87" forKey:@"point"];
        [p3 setValue:@"98" forKey:@"point"];
        NSArray *array = @[p1,p2,p3];
        [person setValue:array forKey:@"persons"];
        NSLog(@"other persons‘ achievement info:%@",[person valueForKeyPath:@"persons.point"]);
        NSLog(@"all persons‘ number is %@",[person valueForKeyPath:@"[email protected]ount"]);
        NSLog(@"the max achievement :%@",[person valueForKeyPath:@"[email protected]"]);
         NSLog(@"the min achievement :%@",[person valueForKeyPath:@"[email protected]"]);
         NSLog(@"the avg achievement :%@",[person valueForKeyPath:@"[email protected]"]);
    }
    return 0;
}

输出的结果如下:

2015-07-29 15:25:48.856 KVCDemo[2968:1026943] other persons‘ achievement info:(
    78,
    87,
    98
)
2015-07-29 15:25:48.856 KVCDemo[2968:1026943] all persons‘ number is 3
2015-07-29 15:25:48.856 KVCDemo[2968:1026943] the max achievement :98
2015-07-29 15:25:48.856 KVCDemo[2968:1026943] the min achievement :78
2015-07-29 15:25:48.876 KVCDemo[2968:1026943] the avg achievement :87.666666666666666666666666666666666666

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-09 17:36:47

iOS KVC 概述的相关文章

iOS KVC详细讲解

iOS KVC详细讲解 什么是KVC? KVC即NSKeyValueCoding,就是键-值编码的意思.一个非正式的 Protocol,是一种间接访问对象的属性使用字符串来标识属性,而不是通过调用存取方法,直接或通过实例变量访问的机制. 以上就是KVC的理论,面试时,如实回答就可以啦! 使用KVC说明 KVC间接修改对象属性时,会自动判断对象属性的类型,完成相应的转换. KVC按键值路径取值时,如果对象不包含指定的键值,那么就会自动进入对象内部,查找对象属性. KVC可以嵌套按照键值路径取值.

iOS KVO概述

iOS KVO概述 面试中经常会被问到:什么是KVO?这个问题既然出现概率这么大,那么我们就来详细讲一讲到底什么是KVO.下次再有面试官问你的时候,你就可以娓娓道来,以彰显高逼格 概述 问:什么是KVO? 答:KVO是Key-Value Observing的缩写.它提供一种机制,当指定的对象的属性被修改后,则对象就会接受到通知.简单的说就是每次指定的被观察的对象的属性被修改后,KVO就会自动通知相应的观察者了. 如果你能这样回答,面试官一定不会说你错的,这就是KVO的原理.但是如果你能说出KVO

Lesson1 -- IOS开发概述 &amp;&amp; HelloWorld

第一部分:IOS开发概述 1. IOS 系统架构 iOS是基于UNIX的,就系统的稳定性而言,要比其他操作系统好很多,我们完全可以相信这个操作系统! iOS的系统架构分为四个层次: 1)可触摸层 2)媒体服务层 3)核心服务层 4)核心操作系统层 如下图: 2. iOS系统架构中各层次的功能 可触摸层(Cocoa Touch):为应用程序开发提供各种有用的框架,并且大部分均与用户界面有关,本质上来说它负责用户在iOS设备上的触摸交互操作. 媒体服务层(Media Services):负责提供用于

iOS KVC/KVO总结

http://www.cnblogs.com/QM80/p/3647819.html 如果要修改对象的属性值 1.一般情况下是直接利用对象属性的set方法来修改: Student *stu = [[Student alloc] init]; // set方法的两种书写格式 [stu setAge:10]; stu.age = 10; 2.但是如果不知道对象类型呢?那么就可以运用KVC键值编码(Key Value Coding) 间接的修改对象属性 KVC实现方式是:使用字符串来描述对象需要修改的

李洪强iOS之集成极光推送一iOS SDK概述

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px "PingFang SC"; color: #000000 } span.s1 { } span.s2 { font: 18.0px Menlo } 李洪强iOS之集成极光推送一iOS SDK概述 p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Menlo; color: #000000 } span.s1 { } JPus

ios的概述和了解的个人总结

ios的概述: ios  为apple手持设备系统: OS X 为apple的macbook.imac.mac min等的操作系统: 应用程序的格式:dmg    app iphone 第一代 2007  6月 iphone 3G  第二代 2008   7月 iphone 3GS  第三代 2009   6月 iphone 4     2010  6月 iphone 4S   2011  10月 iphone 5     2012  9月 iphone 5C/5S  2013 9月 iphon

iOS设计模式 - 概述

最近可自由安排的时间比较多, iOS应用方面, 没什么好点子, 就先放下, 不写了.花点时间学学设计模式. 之后将会写一系列博文, 记录设计模式学习过程. 当然, 因为我自己是搞iOS的, 所以之后设计代码部分, 将尽量与objective-c相结合. iOS设计模式 - 概述           by Colin丶 转载请注明出处:              http://blog.csdn.net/hitwhylz/article/details/40372113 一.定义 设计模式(Des

iOS API 概述

原文:http://www.bubuko.com/infodetail-650437.html iOS API简介 转自:http://book.2cto.com/201307/27019.html 苹果的iOS API在不同版本间有很多变化,本书采用的是iOS 6.本节中,我们会介绍iOS 6有哪些API,如何使用这些API的帮助文档以及如何使用官方案例.2.6.1 API概述iOS的整体架构图如图2-40所示,分为4层——Cocoa Touch层.Media层.Core Services层和

&quot;iOS push全方位解析(一)【译文】&quot;——iOS PUSH概述

这是一篇来自raywenderlich的教程,内容翔实!结构简单.讲解循序渐进.文章质量上乘!是一篇难的的博文!使用半瓶的英语水平翻译了一下: 1. push的概述(本博文) 2. 生成push证书,生成Provisioning Profile 3. 一个极简的demo,并测试一下push 这里查看原文 -------------------------------------------------------------------------------------------------