Jaki jest typowy sposób przechowywania struktur c w pliku NSArray
? Zalety, wady, obsługa pamięci?
W szczególności, jaka jest różnica między valueWithBytes
a valueWithPointer
- podniesionymi przez justina i suma poniżej.
Oto link do dyskusji Apple valueWithBytes:objCType:
dla przyszłych czytelników ...
Jeśli chodzi o myślenie poboczne i przyjrzenie się wydajności, Evgen poruszył kwestię używania STL::vector
w C ++ .
(To rodzi interesujący problem: czy istnieje szybka biblioteka c, STL::vector
podobna do tej, która jest dużo lżejsza, która pozwala na minimalną „uporządkowaną obsługę tablic”…?)
Więc oryginalne pytanie ...
Na przykład:
typedef struct _Megapoint {
float w,x,y,z;
} Megapoint;
Więc: jaki jest normalny, najlepszy, idiomatyczny sposób przechowywania własnej struktury NSArray
w takim idiomie i jak radzisz sobie z pamięcią w tym idiomie?
Zwróć uwagę, że szczególnie szukam zwykłego idiomu do przechowywania struktur. Oczywiście można by uniknąć tego problemu, tworząc nową małą klasę. Jednak chcę wiedzieć, jak zwykły idiom faktycznie umieszcza struktury w tablicy, dzięki.
A tak przy okazji, oto podejście NSData, które może być? nie najlepiej ...
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];
BTW jako punkt odniesienia i dzięki Jarret Hardie, oto jak przechowywać CGPoints
i podobne w NSArray
:
NSArray *points = [NSArray arrayWithObjects:
[NSValue valueWithCGPoint:CGPointMake(6.9, 6.9)],
[NSValue valueWithCGPoint:CGPointMake(6.9, 6.9)],
nil];
(zobacz W jaki sposób mogę łatwo dodawać obiekty CGPoint do NSArray? )