Objective c 什么是NSCFD词典?

Objective c 什么是NSCFD词典?,objective-c,cocoa,nsdictionary,core-foundation,Objective C,Cocoa,Nsdictionary,Core Foundation,我收到了一本NSCFD字典,但我不知道如何使用它。我知道它是NSCFDictionary类型的,因为我打印了这个类,结果是作为u NCSFDictionary出来的。我不知道该怎么处理它 我现在只是想抓住它,但我甚至无法让它发挥作用: NSDictionary *dict = [[NSURLCredentialStorage sharedCredentialStorage] allCredentials]; for(NSURLProtectionSpace key in [dict ke

我收到了一本NSCFD字典,但我不知道如何使用它。我知道它是NSCFDictionary类型的,因为我打印了这个类,结果是作为u NCSFDictionary出来的。我不知道该怎么处理它

我现在只是想抓住它,但我甚至无法让它发挥作用:

  NSDictionary *dict = [[NSURLCredentialStorage sharedCredentialStorage] allCredentials];
  for(NSURLProtectionSpace key in [dict keyEnumerator])
  {
         NSCFDictionary *value = [dict objectForKey:key];
  }

allCredentials的类引用表示它应该返回一个字典,其值也是字典。但我的作业说明不起作用。我需要某种类型的强制转换吗?

NSCFDictionary是实现实际功能的NSDictionary的私有子类。这只是一本字典。你使用的任何一本NSC字典都将是一本隐藏的NSCFD字典。这对你来说并不重要。您可以将变量键入NSDictionary并相应地使用它。

NSDictionary和另一个实际上是:几个具体的子类伪装在单个类的接口下:它们都提供相同的功能(因为它们是同一类的子类-在NSDictionary的例子中,这涉及三个“基本方法”
-count
-objectForKey:
,和
-keyEnumerator
),但根据创建方式和存储的数据类型,有不同的内部工作机制,以便在不同情况下有效

NSCFDictionary只是NSDictionary的一个具体子类。也就是说,您的NSDictionary实际上可能是NSCFDictionary实例,但您应该将它们视为NSDictionary实例,因为这将为您提供所需的字典存储功能

NSDictionary *value = [dict objectForKey:key];
我有一个NSCFDictionary,它实际上是一个NSMutableDictionary对象,我可以从中删除项目。我提到这一点是为了进一步澄清jtbandes的回答:NSCFDictionary对象可以是从NSDictionary继承的任何对象。

hmm那么这怎么会不起作用……NSDictionary*值=[dict objectForKey:key];@JPC:假设
dict
持有指向响应
objectForKey:
的对象的指针,例如NSDictionary(或其任何子类)的另一个实例,很好用。我试着只使用NSDictionary,但无法编译。可能是Xcodeissue@JPC:与此问题相关的一个重要区别是在运行时返回给您的对象类型(在本例中,是NSCFDictionary,而不是NSDictionary)在编译时不会导致问题。编译在执行之前进行;如果编译器在构建程序时向您显示错误,那么如果您可以运行它,则不会发生任何相关的错误。我有一个类似的问题,我想检查对象的类是否为特定类型(NSString、NSNumber、NSData、NSDictionary或NSArray)。对象的类返回NSCFString、NSCFDictionary等。这意味着我的检查失败。有什么方法可以解决此问题吗?@MagicBulletDave Use
isKindOfClass:
为此:(例如,一个NSString对象在运行时可能类似于NSCFString,但它始终是NSString本身的子类).实际上,这里缺少的部分是NSDictionary是免费桥接到CFDictionary的,在大多数情况下,两者实际上都会创建NSCFDictionary的实例。
for (NSURLProtectionSpace *key ...