Какой обычный способ хранения c-структур в NSArray
? Преимущества, недостатки, обработка памяти?
Примечательно, в чем разница между valueWithBytes
и 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? )