【问题标题】:hacky use of NSMutableDictionary to map on non-copyable objects使用 NSMutableDictionary 来映射不可复制的对象
【发布时间】:2012-01-12 05:35:59
【问题描述】:

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

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

由于我不想为不需要知道如何复制的第 3 方库对象创建自己的 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]];

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

【问题讨论】:

    标签: objective-c ios


    【解决方案1】:

    只需使用关联对象...

    How do I use objc_setAssociatedObject/objc_getAssociatedObject inside an object?

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-03-18
      • 2019-02-13
      • 1970-01-01
      • 2013-10-12
      • 2016-09-26
      • 1970-01-01
      • 2013-08-01
      • 1970-01-01
      相关资源
      最近更新 更多