1

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

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

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

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

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

4

2 回答 2

3

我看到了三种值得尝试的方法:

  1. 使用 NSMapTable
  2. 使用 objc_setAssociatedObject
  3. 使用 std::unordered_map 或 std::map

objc_setAssociatedObject 在幕后使用 std::unordered_map 。

于 2012-12-04T08:13:34.977 回答
0

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

我采用的解决方案是降低一个级别并使用 CoreFoundation 的 CFMutableDictionary。我建议您看一下:CFMutableDictionary Reference。它在 , 中接受常规 C 指针CFDictionaryAddValue()CFDictionaryRemoveValue因此它是用于接口 Obj-C 和 C++ 的最佳方式(C 是它们的共同点)。

我宁愿这样做而不是使用 anstd::unordered_map的原因是因为我倾向于在这类事情中尽量减少 C++。Obj-C++ 有点像 hack,最好将其简化为在真正的 Obj-C 和现有 C++ 代码之间粘合代码。

于 2012-12-30T21:26:15.537 回答