¿Cuál es la forma habitual de almacenar estructuras en C en un NSArray
? ¿Ventajas, desventajas, manejo de la memoria?
En particular, ¿cuál es la diferencia entre valueWithBytes
y valueWithPointer
- planteado por justin y bagre a continuación?
Aquí hay un enlace a la discusión de Apple valueWithBytes:objCType:
para futuros lectores ...
Para un poco de pensamiento lateral y mirando más al rendimiento, Evgen ha planteado el problema del uso STL::vector
en C ++ .
(Eso plantea un problema interesante: ¿hay una biblioteca c rápida, no muy diferente STL::vector
pero mucho más ligera, que permita el mínimo "manejo ordenado de matrices" ...?)
Entonces la pregunta original ...
Por ejemplo:
typedef struct _Megapoint {
float w,x,y,z;
} Megapoint;
Entonces: ¿cuál es la mejor manera normal, idiomática de almacenar la propia estructura así en un NSArray
, y cómo manejas la memoria en ese idioma?
Tenga en cuenta que estoy buscando específicamente el idioma habitual para almacenar estructuras. Por supuesto, uno podría evitar el problema haciendo una nueva clase pequeña. Sin embargo, quiero saber cómo se usa el idioma habitual para poner estructuras en una matriz, gracias.
Por cierto, aquí está el enfoque NSData, que tal vez sea? no es el mejor ...
Megapoint p;
NSArray *a = [NSArray arrayWithObjects:
[NSData dataWithBytes:&p length:sizeof(Megapoint)],
[NSData dataWithBytes:&p length:sizeof(Megapoint)],
[NSData dataWithBytes:&p length:sizeof(Megapoint)],
nil];
Por cierto, como punto de referencia y gracias a Jarret Hardie, aquí se explica cómo almacenar CGPoints
y similares en un NSArray
:
NSArray *points = [NSArray arrayWithObjects:
[NSValue valueWithCGPoint:CGPointMake(6.9, 6.9)],
[NSValue valueWithCGPoint:CGPointMake(6.9, 6.9)],
nil];
(consulte ¿Cómo puedo agregar objetos CGPoint a un NSArray de manera fácil? )