Luk*_*uke 10 cocoa-touch objective-c chipmunk ios nsvalue
我通过对象和以下代码行存储Chipmunk Physics的cpShape
对象:NSMutableDictionary
NSValue
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
结构几乎完全由引用使用.每次复制它时,都会获得对新副本的新引用,其中一些副本存在于堆栈中并被静默和自动销毁.非常非常糟糕.
相反,你想要创建一个NSValue
using [NSValue valueWithPointer:shape]
并使用该指针返回[value pointerValue]
.这样NSValue只存储指向原始的指针cpShape
.
不是简单的:
NSValue *value = [staticBodiesInUse objectForKey:name];
cpShape shape;
[value getValue:&shape];
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5738 次 |
最近记录: |