iOS学习--KVC

来源:互联网 发布:centos安装输入法 编辑:程序博客网 时间:2024/05/25 05:36

    今日就来回顾一下KVC。在object-c中,前面使用@property关键字可以为类的成员变量自动生成它的geter与setter方法,从而可以直接使用点语法来访问

类的成员变量。其实,object-c中还有另外一个方式来间接访问类的成员变量。那个就是今天回顾的KVC了

   KVC的概念:Key---Value--coding.直译就是“键值编程”。其实使用KVC,还有使用键路径的方式访问数据的,下面再表。

   在每一个对象当中的成员变量,在KVC中都会有一个key对应着这个成员变量的值,而key是一个字符串,但是这个字符串的内容是有很明确的规定的。

必须是成员变量的名字。也就是说,KVC就是通过这个字符串来查找成员的变量,并进行访问的。

   那么,KVC内部是如何查找的呢?它也是按照一定的顺序,比如先按照(key)来查找,找不到就is(key).....这部分KVC内部实现原理的知识还没有深入研究,

知识大概了解过。网上有很多这些资料。同理,在获取也是通过的方式的。

   使用键值的方式访问变量,常用的方法是  [setValue  forkey]  和[ valueforkey ];

   好,下面马上post上代码。


1、首先在工程中添加一个Person的类,在.h文件中添加它的两个成员age ,books。同时,也定义一个Book的类.

//Person.h

@interface Person : NSObject{    int height;    Book *books;}
<span style="font-family: Arial, Helvetica, sans-serif;">@end</span>


//Person.m,并没有对变量实现对应的setter与getter方法

@implementation Person
@end


//Book.h

@interface Book : NSObject@property (nonatomic, assign) double price;@end

//Book.m 同样没有对price成员变量做实现get和set方法,代码不贴。


在主函数里面调用:

    Person  *Jack = [[Person alloc] autorelease];        NSNumber *JackHeight = @(10);         [Jack setValue:JackHeight forKey:@"height"];//通过key对成员变量进行赋值        int height = [[Jack valueForKey:@"height"] intValue];  //通过key获取成员变量的值    NSLog(@"Jack height:%d",height);


输出结果:

2014-11-13 23:48:24.257 Foundation04-NSArray(OC数组)[785:303] Jack height:10

总结:使用KVC的键值间接访问成员变量。


2、除了通过键值访问类的成员变量,还可以通过键路径的方式访问。思路就是每一层数据的包含,都会有对应的路径一一对应。这个就像一个树状图一样,顺藤摸瓜!


在主函数中调用:

    Person *Chuck = [[Person alloc] autorelease];        Book *book1 = [[Book alloc] autorelease];    book1.price = 20.3;        [Chuck setValue:book1 forKey:@"books"];        NSNumber *bookPrice = [Chuck valueForKeyPath:@"books.price"];        NSLog(@"chuck`s books price is:%f",[bookPrice doubleValue]);


输出结果:

2014-11-13 23:56:01.502 Foundation04-NSArray(OC数组)[820:303] chuck`s books price is:20.300000

总结:键路径跟键值访问其实都是一样的。至于KVC原理,看了也忘了,也是记得大概。



---今晚好累,想早点训教!谢谢各位浏览并作出指导!晚安,to be continut.!



0 0
原创粉丝点击