Was ist der übliche Weg, um C-Strukturen in einem zu speichern NSArray
? Vor- und Nachteile, Speicherhandhabung?
Insbesondere, was ist der Unterschied zwischen valueWithBytes
und valueWithPointer
- von Justin und Wels unten aufgezogen.
Hier ist ein Link zu Apples Diskussion valueWithBytes:objCType:
für zukünftige Leser ...
Für ein wenig Querdenken und mehr Blick auf die Leistung hat Evgen das Problem der Verwendung STL::vector
in C ++ angesprochen .
(Das wirft ein interessantes Problem auf: Gibt es eine schnelle c-Bibliothek, die nicht anders, STL::vector
aber viel leichter ist und die minimale "ordentliche Handhabung von Arrays" ermöglicht ...?)
Also die ursprüngliche Frage ...
Beispielsweise:
typedef struct _Megapoint {
float w,x,y,z;
} Megapoint;
Also: Was ist die normale, beste und idiomatische Art, die eigene Struktur so in einem zu speichern NSArray
, und wie geht man mit dem Gedächtnis in dieser Sprache um?
Bitte beachten Sie, dass ich speziell nach der üblichen Sprache zum Speichern von Strukturen suche. Natürlich könnte man das Problem vermeiden, indem man eine neue kleine Klasse bildet. Ich möchte jedoch wissen, wie die übliche Redewendung zum tatsächlichen Einfügen von Strukturen in ein Array funktioniert, danke.
Übrigens ist hier der NSData-Ansatz, der vielleicht ist? nicht am besten ...
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];
Übrigens als Referenz und dank Jarret Hardie, hier ist, wie man CGPoints
und ähnliches in einem NSArray
:
NSArray *points = [NSArray arrayWithObjects:
[NSValue valueWithCGPoint:CGPointMake(6.9, 6.9)],
[NSValue valueWithCGPoint:CGPointMake(6.9, 6.9)],
nil];
(Siehe Wie kann ich CGPoint-Objekte auf einfache Weise zu einem NSArray hinzufügen? )