我通过NSValue对象和以下代码行将Chipmunk Physics的cpShape对象存储在NSMutableDictionary中:
NSValue *shapeValue = [[NSValue alloc] initWithBytes: shape objCType: @encode(cpShape)]; [staticBodiesInUse setObject: shapeValue forKey: name];
我现在需要将cpShape退出来,将它与另一个形状进行比较.我怎样才能做到这一点?我在NSValue中看到一个getValue:方法,但它需要一个缓冲区,不太确定该怎么做.
解决方法
所以trojanfoe的答案只是部分正确.
这样做有一个很大的问题.当您以这种方式创建NSValue时,您正在复制cpShape结构体,并将其取回,您将再次复制. cpShape结构几乎完全用于引用.每次复制它时,都会获得对新副本的新引用,并且这些副本中的一些副本存在于堆栈中,并被静默且自动地破坏.非常非常糟糕
而是要使用[NSValue valueWithPointer:shape]创建一个NSValue,并使用[value pointerValue]将该指针返回.这样NSValue只存储一个指向原始cpShape的指针.