最常见的真实生活键值编码示例

密钥值编码使用 NSKeyValueCoding 协议集成到 NSObject 中。 ****

这意味着什么?

这意味着任何 id 对象都能够调用 valueForKey 方法及其各种变体,如 valueForKeyPath 等。

它还意味着任何 id 对象都可以调用 setValue 方法及其各种变体。

例:

id obj = [[MyClass alloc] init];
id value = [obj valueForKey:@"myNumber"];

int myNumberAsInt = [value intValue];
myNumberAsInt = 53;
[obj setValue:@(myNumberAsInt) forKey:@"myNumber"];

例外:

上面的例子假设 MyClass 有一个名为 myNumber 的 NSNumber 属性。如果 myNumber 没有出现在 MyClass 接口定义中,则可能会在第 2 行和第 5 行引发 NSUndefinedKeyException - 通常称为:

this class is not key value coding-compliant for the key myNumber.

为什么这是如此强大:

你可以编写可以动态访问类属性的代码,而无需该类的接口。这意味着表视图可以显示来自 NSObject 派生对象的任何属性的值,前提是其属性名称是在运行时动态提供的。

在上面的示例中,代码也可以在没有 MyClass 可用的情况下工作,并且 id 类型 obj 可用于调用代码。