zoukankan      html  css  js  c++  java
  • iOS开发系列UI基础KVC

    这些知识是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对象的成员属性, . 后面是这个对象的成员属性。这是这个方法独有的功能;

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

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

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

  • 相关阅读:
    调用Type.InvokeMember()时出现MissingMethodException
    C#学习之Delegate
    WCF之元数据交换 (Metadata Exchange)
    定义Enum的开始和结束,这样就能循环Enum了
    定制自己的Visual Studio的Debugger Visualizer
    C#中 #if DEBUG 和 Conditional("DEBUG")的区别
    从哪里开始学习Windows 8?(zz)
    Macro 小总结
    WPF应用的图标
    如何把 Visutal studio中的“printonbreakpoint”消息打印在程序的任何地方
  • 原文地址:https://www.cnblogs.com/xiaobai51/p/5518450.html
Copyright © 2011-2022 走看看