【力学】KVC基本原理

2017-04-24  本文已影响4人  韩叨叨

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”方法机制如上。

上一篇 下一篇

猜你喜欢

热点阅读