gpt4 book ai didi

Objective-C:forKey 和 forKeyPath 有什么区别?

转载 作者:可可西里 更新时间:2023-11-01 03:42:28 26 4
gpt4 key购买 nike

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::

  1. valueForKey: 仅适用于字符串键。字典可以使用其他对象作为键。
  2. valueForKey: 以不同方式处理以“@”字符开头的键。您不能访问键以 @ 开头的元素。
  3. 最重要的是:通过使用 valueForKey:,您是在说:“我正在使用 KVC”。应该有这样做的理由。使用 objectForKey: 时,您只是通过自然的预期 API 访问字典中的元素。

关于Objective-C:forKey 和 forKeyPath 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11433822/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com