美文网首页
KVC的基本方法

KVC的基本方法

作者: 哆啦_ | 来源:发表于2018-05-11 23:12 被阅读18次

继承自NSObject及其子类的对象都支持键值编码,并实现了NSKeyValueCoding协议的方法。该协议的实现依赖我们定义的实例变量(或ivars)和访问方法。这些方法遵循某些定义好的模式,以便当它收到KVC消息时将key和属性关联起来,比如valueForKey:setValue:forKey:消息。

通常只需要使用@property语句声明一个属性,并允许编译器自动生成ivaraccessor方法(编译器默认会自动生成)。

如果确实需要在Objective-C中手动实现accessor方法或ivars,请遵循本节中的指导原则以保持合规性。 要提供与集合属性交互的附加功能,请实现这篇文章中描述的方法。 如果要键值验证某个对象,请使用KVC之添加验证方法中介绍的方法。

Basic Getter

要实现一个返回属性value的getter方法,虽然可能做了额外的自定义的操作,但可以使用名称类似属性的方法,比如:

- (NSString*)title
{
   // Extra getter logic…
   // 额外的逻辑处理
 
   return _title;
}

对于持有布尔值的属性,可以使用以is为前缀的方法,比如:

- (BOOL)isHidden
{
   // Extra getter logic…
 
   return _hidden;
}

当属性是基本数据变量或者结构体,KVC的默认实现是将value包装在对象中。在 这篇文章中有描述。

Basic Setters

对于hidden属性的setter方法:

- (void)setHidden:(BOOL)hidden
{
   // Extra setter logic…
   _hidden = hidden;
}

WARNING

永远不要从set<Key>:方法内部调用在验证属性中描述的验证方法。

当属性是非对象类型,比如一个布尔类型hidden,协议的默认实现是检查底层数据类型,并在将值用于你的setter之前将来自setValue:forKey:valueunwrap为对象类型(这种情况下是NSNumber实例),更多的描述可以查看这篇文章

如果一个nil值有可能写入到你的非对象属性,你需要重写setNilValueForKey:以处理这种情况。

- (void)setNilValueForKey:(NSString *)key
{
    if ([key isEqualToString:@"hidden"]) {
        [self setValue:@(NO) forKey:@”hidden”];
    } else {
        [super setNilValueForKey:key];
    }
}

实例变量

如果KVC中的一个方法的默认实现不能找到属性的访问方法,它会查询类的accessInstanceVariablesDirectly方法,以查看该类是否允许直接使用实例变量。默认情况下,该方法返回YES,我们也可以重写此方法。

如果允许使用ivars,请确保使用以下划线(_)为前缀的属性名。通常情况下,编译器会在自动生成属性的时候执行了该操作,但是如果使用了@synthesize,就可以自行执行此命名:

@synthesize title = _title;

在某些情况下,可以使用@dynamic指令告诉编译器我们将在运行时提供getter和setter,而不是使用@synthesize指定或编译器自动生成。可以通过这种方法避免自动生成一个getter,以便我们自己可以提供集合访问方法作为代替。更多可以查看Defining Collection Methods.这种情况下,可以声明ivar是接口声明的一部分:

@interface MyObject : NSObject {
    NSString* _title;
}
 
@property (nonatomic) NSString* title;
 
@end

相关文章

  • KVC 相关

    1 .KVC 的基本使用kvc 相关的基本方法包括 设置属性值:::setValue: forKey: ;se...

  • KVC

    KVC基本使用 KVC赋值 按照setKey: -> _setKey ->的顺序查找方法,如果上述方法不存在,判断...

  • 【iOS】KVC的实现

    KVC的基本使用 KVC的基本原理 setValue:forKey 验证在MJPerson中重写这几个方法,首先打...

  • KVC的基本方法

    继承自NSObject及其子类的对象都支持键值编码,并实现了NSKeyValueCoding协议的方法。该协议的实...

  • iOS原理篇(二): KVC实现原理

    KVC实现原理 什么是 KVC KVC基本使用 KVC 原理 总结 一 、 什么是KVC KVC的全称是Key-V...

  • KVC 与 KVO 使用和原理解析

    KVC 什么是 KVC KVC 主要方法 KVC 定义了一种按名称访问对象属性的机制,支持这种访问的主要方法是: ...

  • iOS重学之KVC详解

    KCV的基本使用 KVC的设值原理 解释:1、当存在setKey方法时,调用setKey。2、当setKey方法不...

  • 19.iOS底层学习之iOS底层学习之KVC

    本篇提纲1、KVC的基本介绍2、KVC的API3、KVC的写入过程4、KVC的读取过程5、自定义KVC KVC的基...

  • KVC

    KVC使用的基本方法 设值的实现步骤: 首先查找是否有-setKey: 方法,如果有则调用 如果-setKey: ...

  • iOS KVC

    1. KVC简介 键/值编码中的基本调用是-valueForKey:和-setValue:forKey:方法 2....

网友评论

      本文标题:KVC的基本方法

      本文链接:https://www.haomeiwen.com/subject/pycorftx.html