KVC浅析

作者: usg | 来源:发表于2019-02-18 11:20 被阅读32次

    KVC 概念

          KVC(Key-value coding)键值编码,就是指iOS的开发中,可以允许开发者通过Key名直接访问对象的属性,或者给对象的属性赋值。而不需要调用明确的存取方法。这样就可以在运行时动态地访问和修改对象的属性。而不是在编译时确定,这也是iOS开发中的黑魔法之一。很多高级的iOS开发技巧都是基于KVC实现的。

            它是一种可以通过字符串的名字(key)来访问类属性的机制。而不是通过调用Setter、Getter方法访问。

      关键方法定义在 NSKeyValueCodingProtocol

    KVC支持类对象和内建基本数据类型。

    搜索方式

    setValue检索方式

    1、首先搜索setKey:方法。(key指成员变量名,首字母大写)没找到找_setKey之后是setIsKey

    2、上面的setter方法没找到,如果类方法accessInstanceVariablesDirectly返回YES。那么按 _key,_isKey,key,iskey的顺序搜索成员名。(NSKeyValueCodingCatogery中实现的类方法,默认实现为返回YES)

    3、如果没有找到成员变量,调用setValue:forUnderfinedKey:



    valueForKey检索方式

    1.1按先后顺序搜索getKey,key,iskey,_key方法,若某一个方法被实现,取到的即是方法返回的值,后面的方法不再运行。如果是BOOL或者Int等值类型, 会将其包装成一个NSNumber对象。

    2.若这三个方法都没有找到,则会调用+ (BOOL)accessInstanceVariablesDirectly方法判断是否允许取成员变量的值。若返回NO,直接调用valueForUndefinedKey:,默认是奔溃。若返回YES,会按先后顺序取_key、_isKey、 key、isKey的值。

    3.返回YES时,_key、_isKey、 key、isKey的值都没取到,调用- valueForUndefinedKey:方法。

    相关文章

      网友评论

        本文标题:KVC浅析

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