Який звичайний спосіб зберігати 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? )