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