我需要使用不可复制的对象作为NSMutableDictionary
中的键,默认情况下不允许这样做。我理解不允许这样做的原因(保留关键对象,不像值对象,是不可取的),但似乎在我的特殊情况下可能有办法解决这个问题。
问题是我只需要使用密钥的地址查询字典,即具有查找谓词
if (providedKey == storedKey)
而不是
if ([providedKey isEqual:storedKey])
就足够了。
有没有办法将对象的引用地址(或其他身份形式)提取为可复制的可比对象,我可以将其用作字典键而不是对象本身?
答案 0 :(得分:1)
您可以使用[NSString stringWithFormat:@"%p", someObject]
作为密钥。
这将创建一个字符串,其对象的地址为十六进制值。
答案 1 :(得分:1)
您可以使用表示对象哈希值的nsnumber。
答案 2 :(得分:1)
似乎+[NSValue valueWithPointer:]
可能就是你想要的。它将指针本身存储在符合NSCopying
的对象中,以便您可以将其用作字典键。使用pointerValue
检索指针。
答案 3 :(得分:0)
您可以下载到CoreFoundation API并定义自己的回调(以及其他内容)。
NSMutableDictionary是CFMutableDictionary。
具体来说,您要创建CFMutableDictionary,并定义自己的CFDictionaryKeyCallBacks
。