提取不可复制对象的可复制标识

时间:2011-05-21 23:42:32

标签: iphone objective-c

我需要使用不可复制的对象作为NSMutableDictionary中的键,默认情况下不允许这样做。我理解不允许这样做的原因(保留关键对象,不像值对象,是不可取的),但似乎在我的特殊情况下可能有办法解决这个问题。

问题是我只需要使用密钥的地址查询字典,即具有查找谓词

if (providedKey == storedKey)

而不是

if ([providedKey isEqual:storedKey])

就足够了。

有没有办法将对象的引用地址(或其他身份形式)提取为可复制的可比对象,我可以将其用作字典键而不是对象本身?

4 个答案:

答案 0 :(得分:1)

您可以使用[NSString stringWithFormat:@"%p", someObject]作为密钥。 这将创建一个字符串,其对象的地址为十六进制值。

答案 1 :(得分:1)

您可以使用表示对象哈希值的nsnumber。

答案 2 :(得分:1)

似乎+[NSValue valueWithPointer:]可能就是你想要的。它将指针本身存储在符合NSCopying的对象中,以便您可以将其用作字典键。使用pointerValue检索指针。

答案 3 :(得分:0)

您可以下载到CoreFoundation API并定义自己的回调(以及其他内容)。

NSMutableDictionary是CFMutableDictionary。

具体来说,您要创建CFMutableDictionary,并定义自己的CFDictionaryKeyCallBacks