我的代码中有这些行:
[defaults setValue:someValue forKey:@"someValue"];
[animationGroup setValue:@"someValue" forKey:@"someValue"]; // CAAnimationGroup
NSString* animName = [theAnimation valueForKey:@"someValue"]; // CAAnimation
但是阅读Apple参考文档:
我没有看到任何对这些方法的引用,甚至是解析层次结构或一致的协议。他们从哪里来?是否允许使用它们?
答案 0 :(得分:4)
这些是键值编码方法;如果这些类是符合这些键的键值编码,那么您可以毫无问题地使用它们。关于核心动画,CALayer
和CAAnimation
都符合KVC,详见this programming guide。有关更多一般信息,请参阅NSKeyValueCoding
非正式协议和Key-Value Coding Programming Guide。
答案 1 :(得分:2)
作为旁注,我也很困惑。上面的链接之一提供:
CALayer和CAAnimation都是符合键值编码的容器 类,允许您设置任意键的值。就是这样 键“someKey”不是CALayer类的声明属性, 但是你仍然可以为键“someKey”
设置一个值
意味着您可以安全地发送类似KVC的setValue:forKey:和valueForKey:消息,而不必担心@“someKey”不是真正的KVC兼容属性(因此是“任意键”)。如果在其他对象上尝试此操作,则可能会抛出异常。我承认如果其他类有这种行为,我不确定如何轻松找到 ,在许多其他地方免费获得此行为肯定会有用。