KVC 存取

当调用setValue:属性值 forKey:@”name“的代码时,底层的执行机制如下:

程序优先调用set:<Key>属性值方法,代码通过setter方法完成设置,如果没有找到setName:方法,KVC机制会检查+ (BOOL)accessInstanceVariablesDirectly方法有没有返回YES,默认该方法会返回YES,如果你重写了该方法让其返回NO的话,那么在这一步KVC会执行setValue:forUNdefinedKey:方法。

如果该类即没有set<Key>:方法,也没有_<Key>和_is<Key>成员变量,KVC机制再会继续搜索<Key>和is<Key>的成员变量。再给它们赋值。

如果上面列出的方法或者成员变量都不存在,系统将会执行该对象的setValue:forUNdefinedKey:方法,默认是抛出异常。

当调用ValueforKey:@”name“的代码时,KVC对key的搜索方式不同于setValue:属性值 forKey:@”name“,其搜索方式如下

首先按get<Key>,<Key>,is<Key>的顺序方法查找getter方法,找到的话会直接调用。如果是BOOL或者int等值类型, 会做NSNumber转换

会按_<Key>,_is<Key>,,is<Key>的顺序搜索成员变量名

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • KVC简单介绍 KVC(Key-value coding)键值编码,就是指iOS的开发中,可以允许开发者通过Key...
    公子无礼阅读 5,279评论 0 6
  • KVC(Key-value coding)键值编码,iOS的开发中,可以允许开发者通过Key名直接访问对象的属性,...
    CALayer_Sai阅读 7,368评论 0 4
  • KVC(Key-value coding)键值编码,单看这个名字可能不太好理解。其实翻译一下就很简单了,就是指iO...
    黑暗中的孤影阅读 50,144评论 74 441
  • KVC(Key-value coding)键值编码,单看这个名字可能不太好理解。其实翻译一下就很简单了,就是指iO...
    朽木自雕也阅读 5,482评论 6 1
  • 一个耐得住寂寞的人,一定会是一个不简单的人。他不会因为寂寞而无所事事,不会因为寂寞而抓耳挠腮,也不会因为寂寞而焦躁...
    遇见你挺好阅读 3,265评论 0 2