Qual è il modo usuale per memorizzare le strutture C in un NSArray
? Vantaggi, svantaggi, gestione della memoria?
In particolare, qual è la differenza tra valueWithBytes
e valueWithPointer
- allevato da justin e pesce gatto di seguito.
Ecco un collegamento alla discussione di Apple valueWithBytes:objCType:
per i futuri lettori ...
Per un po 'di pensiero laterale e per guardare più alle prestazioni, Evgen ha sollevato il problema dell'uso STL::vector
in C ++ .
(Ciò solleva una questione interessante: esiste una libreria c veloce, non diversa STL::vector
ma molto più leggera, che consente la minima "gestione ordinata degli array" ...?)
Quindi la domanda originale ...
Per esempio:
typedef struct _Megapoint {
float w,x,y,z;
} Megapoint;
Quindi: qual è il modo normale, migliore, idiomatico per memorizzare la propria struttura in quel modo in un NSArray
, e come gestisci la memoria in quel linguaggio?
Si prega di notare che sto cercando specificamente il solito idioma per memorizzare gli struct. Naturalmente, si potrebbe evitare il problema creando una nuova piccola classe. Tuttavia voglio sapere come è il solito idioma per mettere effettivamente le strutture in un array, grazie.
A proposito, ecco l'approccio NSData che è forse? non migliore ...
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];
A proposito come punto di riferimento e grazie a Jarret Hardie, ecco come archiviare CGPoints
e simili in un NSArray
:
NSArray *points = [NSArray arrayWithObjects:
[NSValue valueWithCGPoint:CGPointMake(6.9, 6.9)],
[NSValue valueWithCGPoint:CGPointMake(6.9, 6.9)],
nil];
(vedi Come posso aggiungere oggetti CGPoint a un NSArray in modo semplice? )