Quelle est la manière habituelle de stocker des c-structures dans un NSArray
? Avantages, inconvénients, gestion de la mémoire?
Notamment, quelle est la différence entre valueWithBytes
et valueWithPointer
- élevé par Justin et le poisson-chat ci-dessous.
Voici un lien vers la discussion d'Apple sur les valueWithBytes:objCType:
futurs lecteurs ...
Pour une réflexion latérale et un examen plus approfondi des performances, Evgen a soulevé le problème de l'utilisation STL::vector
en C ++ .
(Cela soulève un problème intéressant: existe-t-il une bibliothèque c rapide, pas sans rappeler STL::vector
mais beaucoup plus légère, qui permet une "gestion ordonnée des tableaux" minimale ...?)
Donc la question initiale ...
Par exemple:
typedef struct _Megapoint {
float w,x,y,z;
} Megapoint;
Alors: quelle est la manière normale, la meilleure et idiomatique de stocker sa propre structure comme ça dans un NSArray
, et comment gérez-vous la mémoire dans cet idiome?
Veuillez noter que je recherche spécifiquement l'idiome habituel pour stocker des structures. Bien sûr, on pourrait éviter le problème en créant une nouvelle petite classe. Cependant, je veux savoir comment est l'idiome habituel pour mettre réellement des structures dans un tableau, merci.
BTW voici l'approche NSData qui est peut-être? pas mieux ...
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 comme point de référence et grâce à Jarret Hardie, voici comment stocker CGPoints
et similaires dans un NSArray
:
NSArray *points = [NSArray arrayWithObjects:
[NSValue valueWithCGPoint:CGPointMake(6.9, 6.9)],
[NSValue valueWithCGPoint:CGPointMake(6.9, 6.9)],
nil];
(voir Comment puis-je ajouter facilement des objets CGPoint à un NSArray? )