将NSValue转换回存储在其中的结构类型?

Luk*_*uke 10 cocoa-touch objective-c chipmunk ios nsvalue

我通过对象和以下代码行存储Chipmunk Physics的cpShape对象:NSMutableDictionaryNSValue

NSValue *shapeValue = [[NSValue alloc] initWithBytes: shape objCType: @encode(cpShape)];
[staticBodiesInUse setObject: shapeValue forKey: name];
Run Code Online (Sandbox Code Playgroud)

我现在需要cpShape退出,将它与另一种形状进行比较.我怎样才能做到这一点?我看到一个getValue:方法,NSValue但它需要一个缓冲区,不太清楚如何处理它.

sle*_*cke 13

因此,trojanfoe的答案只是部分正确.

这样做有一个很大的问题.当您创建NSValue这种方式时,您正在复制cpShape结构,并将其取回,您将再次复制它.cpShape结构几乎完全由引用使用.每次复制它时,都会获得对新副本的新引用,其中一些副本存在于堆栈中并被静默和自动销毁.非常非常糟糕.

相反,你想要创建一个NSValueusing [NSValue valueWithPointer:shape]并使用该指针返回[value pointerValue].这样NSValue只存储指向原始的指针cpShape.


tro*_*foe 6

不是简单的:

NSValue *value = [staticBodiesInUse objectForKey:name];
cpShape shape;
[value getValue:&shape];
Run Code Online (Sandbox Code Playgroud)