【发布时间】:2011-09-27 18:57:32
【问题描述】:
我需要具有未复制键的字典。这让我跳起了欢乐的舞会,我最终走到了 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 上不存在的一些方法。
【问题讨论】:
-
如果您的目标是桌面 Cocoa,请查看
NSPointerArray。 -
你得到了哪个异常?调用
count应该可以正常工作。 -
不幸的是,我的目标是移动设备。我很震惊没有像 NSPointerArray 这样可用的东西。
标签: objective-c nsmutabledictionary cfmutabledictionary