CFUUIDRef 是CFType,您可以使用任何CFType 作为CFDictionary 中的键:
CFMutableDictionaryRef d = CFDictionaryCreateMutable(
kCFAllocatorDefault,
0,
&kCFTypeDictionaryKeyCallBacks,
&kCFTypeDictionaryValueCallBacks);
CFUUIDRef u1 = CFUUIDCreateFromString(kCFAllocatorDefault, CFSTR("68753A44-4D6F-1226-9C60-0050E4C00067"));
CFUUIDRef u2 = CFUUIDCreateFromString(kCFAllocatorDefault, CFSTR("68753A44-4D6F-1226-9C60-0050E4C00067"));
CFDictionarySetValue(d, u1, CFSTR("fnord"));
CFShow(CFDictionaryGetValue(d, u2)); // prints "fnord"
不幸的是,免费桥接在这种情况下无法正常工作,因为-copy 将在NSMutableDictionary 的-setObject:forKey: 中的键上调用在自定义回调之前(参见@ 987654321@) 导致崩溃。无论如何,使用CFDictionary 代替NSDictionary 是微不足道的。
如果您想要一个 Objective-C 解决方案,另一个选项是 NSMapTable:
NSMapTable *t = NSCreateMapTable(NSObjectMapKeyCallBacks, NSObjectMapValueCallBacks, 0);
NSMapInsert(t, u1, CFSTR("fnord"));
NSLog(@"%@", NSMapGet(t, u2)); // prints "fnord"