我不是 100% 确定这个解决方案的正确性,但我发布它以防万一。
如果您不想使用 CFDictionary,也许您可以使用这个简单的类别:
@implementation NSMutableDictionary(NonCopyableKeys)
- (void)setObject:(id)anObject forNonCopyableKey:(id)aKey {
[self setObject:anObject forKey:[NSValue valueWithPointer:aKey]];
}
- (id)objectForNonCopyableKey:(id)aKey {
return [self objectForKey:[NSValue valueWithPointer:aKey]];
}
- (void)removeObjectForNonCopyableKey:(id)aKey {
[self removeObjectForKey:[NSValue valueWithPointer:aKey]];
}
@end
这是我在网上看到的类似方法的概括(找不到原始来源),用于使用可以存储带有 UITouch 键的对象的 NSMutableDictionary。
与 Chuck 的回答相同的限制适用:您用作键的对象不得以影响其哈希值的方式更改,并且不得在其位于字典中时被释放。
还要确保不要混合-(void)setObject:(id)anObject forNonCopyableKey:(id)aKey
和- (id)objectForKey:(id)aKey
方法,因为它不起作用(后者将返回nil
)。
这似乎工作正常,但可能会有一些我没有想到的不需要的副作用。如果有人发现此解决方案有任何其他问题或警告,请发表评论。