带有+ valueWithPointer的NSDictionary查找:键太慢了

时间:2012-12-04 08:06:43

标签: objective-c ios objective-c++

我有一个Objective C ++类,其实例需要存储任意一组C ++对象,并将每个对象与相应的Objective C对象相关联。在给定C ++对象时查找Objective C对象会破坏我的性能,所以我正在寻找更好的解决方案。

在使用[NSValue valueWithPointer:]创建密钥后,我正在将对存储在NSMutableDictionary中。查找时间(+ valueWithPointer:大约是-objectForKey:的两倍)太慢了。

C ++对象位于第三方框架中,不提供任何唯一标识符。

C ++对象的集合总是小于十几个元素。

执行这些查找的更快方法是什么?

2 个答案:

答案 0 :(得分:3)

我认为有三种方法值得尝试:

  1. 使用NSMapTable
  2. 使用objc_setAssociatedObject
  3. 使用std :: unordered_map或std :: map
  4. objc_setAssociatedObject在幕后使用std :: unordered_map。

答案 1 :(得分:0)

最近我遇到了类似的问题[NSValue valueWithNonRetainedObject:]太慢了。

我使用的解决方案是下拉一个级别并使用CoreFoundation的CFMutableDictionary。我建议你看看它:CFMutableDictionary Reference。它需要CFDictionaryAddValue()CFDictionaryRemoveValue中的常规C指针,因此最好用它来连接Obj-C和C ++(C是它们的共同点)。

我宁愿这样做而不是使用std::unordered_map的原因是因为我倾向于想要在这些事情中最小化C ++。 Obj-C ++有点像黑客,最好只是将它简化为在真正的Obj-C和现有C ++代码之间粘合代码。