我有一个Objective C ++类,其实例需要存储任意一组C ++对象,并将每个对象与相应的Objective C对象相关联。在给定C ++对象时查找Objective C对象会破坏我的性能,所以我正在寻找更好的解决方案。
在使用[NSValue valueWithPointer:]创建密钥后,我正在将对存储在NSMutableDictionary中。查找时间(+ valueWithPointer:大约是-objectForKey:的两倍)太慢了。
C ++对象位于第三方框架中,不提供任何唯一标识符。
C ++对象的集合总是小于十几个元素。
执行这些查找的更快方法是什么?
答案 0 :(得分:3)
我认为有三种方法值得尝试:
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 ++代码之间粘合代码。