¿Convertir un NSValue de nuevo en el tipo de estructura que se almacenó en él?

Estoy almacenando los objects cpShape Chipmunk Physics en un NSMutableDictionary por medio de los objects NSValue y las siguientes líneas de código:

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

Ahora necesito recuperar cpShape para compararlo con otra forma. ¿Cómo puedo hacer eso? Veo un método getValue: en NSValue pero necesita un búfer, no estoy seguro de qué hacer con él.

Entonces, la respuesta de Trojanfoe es solo parcialmente correcta.

Hay un gran problema con eso. Cuando crea el NSValue esa manera, está copyndo la estructura cpShape y, al recuperarla, la copy nuevamente. cpShape estructuras de cpShape se usan casi exclusivamente como reference. Cada vez que lo copy, obtiene una nueva reference a la nueva copy, y algunas de esas copys existen en la stack y se destruyen silenciosa y automáticamente. Muy muy mal.

En su lugar, desea crear un NSValue utilizando [NSValue valueWithPointer:shape] y recuperar ese puntero utilizando [value pointerValue] . De esta manera, el NSValue solo está almacenando un puntero al cpShape original.

¿No es simplemente:

 NSValue *value = [staticBodiesInUse objectForKey:name]; cpShape shape; [value getValue:&shape];