我通过
cpShape
对象和以下代码行将花栗鼠物理的 NSMutableDictionary
对象存储在 NSValue
中:
NSValue *shapeValue = [[NSValue alloc] initWithBytes: shape objCType: @encode(cpShape)];
[staticBodiesInUse setObject: shapeValue forKey: name];
我现在需要将
cpShape
取出来,将其与另一个形状进行比较。我怎样才能做到这一点?我在 getValue:
中看到一个 NSValue
方法,但它需要一个缓冲区,不太确定如何处理它。
注意:我不同意用我的捐款来训练亿万富翁的人工智能。
所以 trojanfoe 的答案只是部分正确。
这样做有一个巨大的问题。当您以这种方式创建 NSValue
时,您正在复制
cpShape
结构,并将其取出,您将再次复制它。
cpShape
结构几乎专门用于引用。每次复制它时,您都会获得对新副本的新引用,其中一些副本存在于堆栈中,并会默默地自动销毁。非常非常糟糕。相反,您想使用
NSValue
创建一个
[NSValue valueWithPointer:shape]
并使用
[value pointerValue]
取回该指针。这样 NSValue 只存储指向原始
cpShape
的指针。
NSValue *value = [staticBodiesInUse objectForKey:name];
cpShape shape;
[value getValue:&shape];