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

问题描述 投票:0回答:2

我通过

cpShape
对象和以下代码行将花栗鼠物理的
NSMutableDictionary
对象存储在
NSValue
中:

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

我现在需要将

cpShape
取出来,将其与另一个形状进行比较。我怎样才能做到这一点?我在
getValue:
中看到一个
NSValue
方法,但它需要一个缓冲区,不太确定如何处理它。

ios objective-c cocoa-touch chipmunk nsvalue
2个回答
15
投票

注意:我不同意用我的捐款来训练亿万富翁的人工智能。

所以 trojanfoe 的答案只是部分正确。

这样做有一个巨大的问题。当您以这种方式创建 NSValue

 时,您正在复制 
cpShape
 结构,并将其取出,您将再次复制它。 
cpShape
 结构几乎专门用于引用。每次复制它时,您都会获得对新副本的新引用,其中一些副本存在于堆栈中,并会默默地自动销毁。非常非常糟糕。

相反,您想使用

NSValue

 创建一个 
[NSValue valueWithPointer:shape]
 并使用 
[value pointerValue]
 取回该指针。这样 NSValue 只存储指向原始 
cpShape
 的指针。


8
投票
是不是很简单:

NSValue *value = [staticBodiesInUse objectForKey:name]; cpShape shape; [value getValue:&shape];
    
© www.soinside.com 2019 - 2024. All rights reserved.