NSMutableDictionary与CFMutableDictionary

时间:2011-09-27 18:57:32

标签: objective-c nsmutabledictionary cfmutabledictionary

我需要一个包含未复制键的字典。这引起了我的欢乐舞蹈,我最终走进了CFMutableDictionary的大门。

我试图了解它们可以互换的程度。在Apple的CFMutableDictionary文档中,他们声明:

  

在您看到NSMutableDictionary *参数的方法中,您可以   传入CFMutableDictionaryRef,并在一个函数中看到一个   CFMutableDictionaryRef参数,你可以传入一个   NSMutableDictionary实例。

但是我想知道是否可以将CFMutableDictionary转换为NSMutableDictionary并在其上调用NSMutableDictionary的方法,在某些情况下你似乎可以;

如果我使用CFDictionaryCreateMutable()创建CFMutableDictionary并将其强制转换为NSMutableDictionary。

我可以致电:

[cfDictionaryCastToNSDictionary objectForKey:someKey]

我也可以打电话:

[cfDictionaryCastToNSDictionary setObject:someObject forKey:someKey]

...如果没有实现NSCopying,它将复制密钥或引发异常。我也可以使用for in循环遍历其值。

但是,如果我打电话:

[cfDictionaryCastToNSDictionary count]

我得到例外。

我的问题是引擎盖下到底发生了什么? Apple文档从未提及能够通过强制转换为NSDictionary来调用CFMutableDictionary上不存在的某些方法。

1 个答案:

答案 0 :(得分:3)

如果您希望了解使用免费桥接的问题,您应该从Mike Ash的"Toll-Free Bridging Internals"开始,然后从那里开始。

如果你只想回去工作,答案是,不要那样做;通过使用CFDictionary的CF函数而不是免费桥接来完全避免这个问题。如果字典纯粹是在内部使用的话,CFDictionary API应该足以完成你想要做的任何事情。