Какой обычный способ хранить c-структуры в NSArray? Преимущества, недостатки, обработка памяти?
Примечательно, какая разница между valueWithBytes и valueWithPointer - подняты valueWithPointer и Сом ниже.
Здесь ссылка на обсуждение Apple valueWithBytes:objCType: для будущих читателей...
Для некоторого бокового мышления и больше внимания к производительности, Евгений поднял вопрос об использовании STL::vector в C++.
(В связи с этим возникает интересная проблема: существует ли быстрая библиотека c, мало чем отличающаяся от STL::vector но намного более легкая, что позволяет минимально "аккуратно обрабатывать массивы"...?)
Итак, оригинальный вопрос...
Например:
typedef struct _Megapoint {
float w,x,y,z;
} Megapoint;
Итак: какой нормальный, лучший идиоматический способ хранить одну собственную структуру, подобную этой, в NSArray, и как вы обрабатываете память в этой идиоме?
Обратите внимание, что я специально ищу обычную идиому для хранения структур. Конечно, можно избежать этой проблемы, создав новый маленький класс. Однако я хочу знать, как обычная идиома для фактического размещения структур в массиве, спасибо.
Кстати, подход NSData, который возможно? не самый лучший...
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];
Кстати, в качестве ориентира и благодаря Джаррету Харди, вот как хранить CGPoints и аналогичные в NSArray:
NSArray *points = [NSArray arrayWithObjects:
[NSValue valueWithCGPoint:CGPointMake(6.9, 6.9)],
[NSValue valueWithCGPoint:CGPointMake(6.9, 6.9)],
nil];
(см. Как я могу добавить объекты CGPoint в NSArray простым способом?)