我通过cpShape
个对象和以下代码行将Chipmunk Physics'NSMutableDictionary
对象存储在NSValue
中:
NSValue *shapeValue = [[NSValue alloc] initWithBytes: shape objCType: @encode(cpShape)];
[staticBodiesInUse setObject: shapeValue forKey: name];
我现在需要退出cpShape
,将其与其他形状进行比较。我怎样才能做到这一点?我在getValue:
中看到了一个NSValue
方法,但它需要一个缓冲区,不太清楚如何处理它。
答案 0 :(得分:13)
因此,trojanfoe的答案只是部分正确。
这样做有一个巨大的问题。当您以这种方式创建NSValue
时,您正在复制cpShape
结构,并将其取回,您将再次复制它。 cpShape
结构几乎完全由引用使用。每次复制它时,都会获得对新副本的新引用,其中一些副本存在于堆栈中并被静默和自动销毁。非常糟糕。
相反,您希望使用NSValue
创建[NSValue valueWithPointer:shape]
并使用[value pointerValue]
获取该指针。这样,NSValue只存储指向原始cpShape
的指针。
答案 1 :(得分:6)
不是简单的:
NSValue *value = [staticBodiesInUse objectForKey:name];
cpShape shape;
[value getValue:&shape];