hacky使用NSMutableDictionary来映射不可复制的对象

时间:2012-01-11 21:28:46

标签: objective-c ios

我想创建一个NSMutableDictionary,它键入特定对象并映射到NSNumber。该对象来自第三方库,并未实现copyWithZone方法。编译器可以理解地抱怨使用代码将无法识别的选择器(copyWithZone)发送到对象:

[dictionary setObject:[NSNumber numberWithInt:index] forKey:someObject];

由于我不想为第三方库对象创建自己的copyWithZone方法,我不需要知道如何复制,因此我没有创建实现该方法的类别。

我的hack是将内存地址存储在NSNumber中,方法是将其转换为long long:

[dictionary setObject:[NSNumber numberWithInt:index] forKey:[NSNumber numberWithLongLong:(long long)someObject]];

要检索值:

NSNumber *indexNumber = [dictionary objectForKey:[NSNumber numberWithLongLong:(long long)someObject]];

这对我来说似乎很骇人听闻。什么是更简洁的方法来处理对象到int的映射?

1 个答案:

答案 0 :(得分:0)

只需使用相关对象......

请参阅How do I use objc_setAssociatedObject/objc_getAssociatedObject inside an object?

那个q / a有一个很好的例子。

(关联对象允许您将任意对象集与另一个对象相关联,使用键来查找任何单个对象。)