Какой обычный способ хранить 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 простым способом?)