我通过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的指针.