Qual é a maneira usual de armazenar estruturas c em um NSArray
? Vantagens, desvantagens, manipulação de memória?
Notavelmente, qual é a diferença entre valueWithBytes
e valueWithPointer
- criado por justin e bagre abaixo.
Aqui está um link para a discussão da Apple sobre valueWithBytes:objCType:
para futuros leitores ...
Para pensar lateralmente e olhar mais para o desempenho, Evgen levantou a questão do uso STL::vector
em C ++ .
(Isso levanta uma questão interessante: existe uma biblioteca c rápida, não diferente, STL::vector
mas muito mais leve, que permite o mínimo "manuseio organizado de matrizes" ...?)
Então, a pergunta original ...
Por exemplo:
typedef struct _Megapoint {
float w,x,y,z;
} Megapoint;
Então: qual é a maneira normal, melhor e idiomática de armazenar sua própria estrutura como essa em um NSArray
, e como você lida com a memória nesse idioma?
Observe que estou procurando especificamente o idioma usual para armazenar structs. Claro, pode-se evitar o problema fazendo uma pequena classe nova. No entanto, quero saber como funciona o idioma usual para realmente colocar structs em um array, obrigado.
BTW, aqui está a abordagem NSData que talvez seja? não é o melhor ...
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];
BTW como um ponto de referência e graças a Jarret Hardie, veja como armazenar CGPoints
e semelhantes em NSArray
:
NSArray *points = [NSArray arrayWithObjects:
[NSValue valueWithCGPoint:CGPointMake(6.9, 6.9)],
[NSValue valueWithCGPoint:CGPointMake(6.9, 6.9)],
nil];
(veja Como posso adicionar objetos CGPoint a um NSArray da maneira mais fácil? )