码迷,mamicode.com
首页 > 移动开发 > 详细

iOS开发系列-UI基础-KVC

时间:2016-05-23 01:00:28      阅读:334      评论:0      收藏:0      [点我收藏+]

标签:

这些知识是UI初级学习的,目前我还在学习中,适合初学者看

KVC—Key Value Coding 也就是键值编码 是一种获取值和设置值的方式

当我们创建一个类文件,为这个类设置成员属性的时候:

创建一个“人”类:有名字(name), 年龄(age)两个公有的成员属性:

技术分享

因为使用@property关键字,会在HFPerson.m中,直接生成setter(设置值) 、getter(获取值)方法,也就是对应的点语法。因为两个成员属性是公有的,我们可以在任何地方访问这些属性 例如我在main.m中,创建一个人类对象,给name属性赋值

技术分享

那么既然有了setter和getter方法,为什么还要有KVC获取值和设置值的方法呢?

下面介绍一下KVC比普通setter 和 getter 方法强大的地方

我在HFPerson.m文件中添加一个延展,也就是人类的私有属性sex(性别)属性,

技术分享

此时我们用断点看一下,人类对象中是有sex属性

技术分享

下面我在main.m中给p1对象设置sex属性,看看会出现什么情况:

技术分享

我们是没有办法在别的类中访问本类的私有属性的,那么我现在想实现在main.m中获取或者设置sex属性,那么怎么实现呢?

下面介绍KVC第一个强大的地方:

在KVC眼中,没有私有属性,任何属性都可以访问的到,那么我们用KVC在Main.m中设置p1对象的sex属性,并且获取sex属性

技术分享

此时我们通过KVC给p1的sex私有属性,设置了值,也获取到了值,这是setter getter无法做到的,

这个方法名字:- (void)setValue:(nullable id)value forKey:(NSString *)key;

下面介绍一下方法:- (void)setValue:(nullable id)value forKeyPath:(NSString *)keyPath;这个方法可以实现上面方法的功能,那么和上面的方法有什么区别呢?

现在有一个新的需求:创建一个“书”(book)类,这个类中有一个名字(bookName)私有属性,此时我给刚才创建的人类添加一个(book)对象属性技术分享

技术分享

接下来,我在main.m中创建书对象,赋值给p1对象的book属性

技术分享

现在有一个新的需求,如何通过p1设置或者获取book的私有属性(bookName)的值?普通点语法肯定做不到

技术分享

那么我用- (void)setValue:(nullable id)value forKey:(NSString *)key;方法呢

技术分享

book.bookName 不是p1对象的属性成员。book是p1对象的属性成员,而bookName是book的属性成员 那么这个时候怎么通过p1直接修改bookName呢?

使用- (void)setValue:(nullable id)value forKeyPath:(NSString *)keyPath;方法

技术分享

介绍一下这个方法,[p1 setValue:@"九阴真经" forKeyPath:@"book.bookName"];使用这个方法的时候,它会认为 . 前面是一个对象,这个对象是p1对象的成员属性, . 后面是这个对象的成员属性。这是这个方法独有的功能;

接下来,介绍一下第二个强大的功能:

技术分享

就先介绍这几个功能吧,目前就学了这几个,以后有新的发现,会及时更新的。

第一次写博客,希望大家能看懂。

 

iOS开发系列-UI基础-KVC

标签:

原文地址:http://www.cnblogs.com/xiaobai51/p/5518450.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!