【力学】KVC基本原理

KVC,即Key-Value-Coding,键值编码。一个非正式的 Protocol,提供一种机制来间接访问对象的属性。

最基本的两个方法:

setValue: 属性值 forKey:属性名:
valueForKey:属性名:

举个栗子
声明一个有name,age属性的User类

[user setValue:@"孙悟空" forKey:@"name"];
[user setValue:@"[NSNumber numberWithInt]" forKey:@"age"];
[user valueForKey: @"name"];
[user valueForKey:@"age"];

在KVC编程中,无论调用这两个哪个方法,都是通过NSString对象来指定被操作属性的。

底层机制都是:
(1)程序优先考虑调用“setName:属性值”(valueForKey)代码,通过setter(getter)方法完成设置。
(2)如果没有setName:方法,KVC机制会搜索该类名为_name的成员变量,无论该成员变量是在类接口部分定义,还是在实现部分定义,也无论用哪个访问控制符修饰,这条KVC代码底层实际都是对_name成员变量的赋值。
(3)如果既没有setName:的方法,也没有定义_name成员变量,KVC机制会继续搜索该类名为name的成员变量,无论该成员变量是在类接口部分定义,还是在实现部分定义,也无论用哪个访问控制符修饰,底层是对name成员变量的赋值。
(4)如果还没找到,系统就会执行该对象的setValue:forUndefinedKey:方法。
而这个方法需要重写,否则会导致程序异常结束。

同理,valueForKey:@“name”方法机制如上。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • KVC(Key-value coding)键值编码,单看这个名字可能不太好理解。其实翻译一下就很简单了,就是指iO...
    朽木自雕也阅读 5,488评论 6 1
  • KVC(Key-value coding)键值编码,单看这个名字可能不太好理解。其实翻译一下就很简单了,就是指iO...
    黑暗中的孤影阅读 50,156评论 74 441
  • KVC(Key-value coding)键值编码,单看这个名字可能不太好理解。其实翻译一下就很简单了,就是指iO...
    Fendouzhe阅读 3,928评论 0 6
  • 简介 KVC(Key-value coding)键值编码,翻译一下就是指iOS的开发中,可以允许开发者通过Key名...
    6ffd6634d577阅读 5,225评论 1 9
  • KVC(Key-value coding)键值编码,iOS的开发中,可以允许开发者通过Key名直接访问对象的属性,...
    CALayer_Sai阅读 7,372评论 0 4

友情链接更多精彩内容