Как обычно хранить c-структуры в файле NSArray
? Достоинства, недостатки, обработка памяти?
Примечательно, в чем разница между valueWithBytes
и valueWithPointer
- поднятый Джастином и сомом ниже.
Вот ссылка на обсуждение Apple valueWithBytes:objCType:
для будущих читателей ...
Для нестандартного мышления и большего внимания к производительности Evgen поднял вопрос об использовании 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 простым способом? )