NSMutableDicitionary的setValue方法中的forKey和forKeyPath有什么区别?我在文档中都对它们进行了查找,对我来说它们似乎相同。我尝试了以下代码,但无法区分两者之间的区别。

NSMutableDictionary *dict = [NSMutableDictionary dictionary];
[dict setValue:@"abc" forKey:@"ABC"];
[dict setValue:@"123" forKeyPath:@"xyz"];
for (NSString* key in dict) {
    id val = [dict objectForKey:key];
    NSLog(@"%@, %@", key, val);
}

最佳答案

这两种方法都是Key-Value Coding的一部分,通常不应该用于字典中的元素访问。它们仅对NSString类型的键起作用,并且需要特定的语法。

两者之间的区别在于,指定(单个)键只会查找该项目。

另一方面,指定关键路径将遵循对象的路径。如果您有词典字典,则可以使用诸如"key1.key2"之类的关键路径在第二级中查找元素。

如果只想访问字典中的元素,则应使用objectForKey:setObject:forKey:

编辑以回答为什么不应该使用valueForKey::

  • valueForKey:仅适用于字符串键。字典可以将其他对象用作键。
  • valueForKey:以不同方式处理以“@”字符开头的键。您不能访问其键以@开头的元素。
  • 最重要的是:通过使用valueForKey:,您说的是:“我正在使用KVC”。这样做应该是有原因的。使用objectForKey:时,您只是通过自然的预期API访问字典中的元素。
  • 关于objective-c - Objective-C:forKey和forKeyPath有什么区别?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11433822/

    10-14 22:29