我需要一个带有未复制键的字典。这让我跳起了欢乐的舞蹈,我最终走到了 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 上不存在的一些方法。