2010-03-10 6 views

Répondre

21

Utilisez un NSMutableArray, mais placez simplement vos structures CGPoint dans NSValue objets. Exemple:

CGPoint myPoint = {0,0}; 
CGPoint anotherPoint = {42, 69}; 

NSMutableArray * array = [NSMutableArray array]; 
[array addObject:[NSValue valueWithCGPoint:myPoint]]; 
[array addObject:[NSValue valueWithCGPoint:anotherPoint]]; 

CGPoint retrievedPoint = [[array objectAtIndex:0] CGPointValue]; 

Notez que les +valueWithCGPoint: et CGPointValue méthodes ne sont disponibles que sur l'iPhone. Cependant, si vous en avez besoin pour le Mac, il existe des méthodes similaires pour traiter NSPoint s, et il est trivial de convertir un CGPoint en un NSPoint (vous pouvez lancer ou utiliser NSPointFromCGPoint()).

+0

Salut ne devez-vous pas allouer une taille pour le tableau? est-ce que addObject redimensionne le tableau si nécessaire? –

+0

@ jesse.rj - NSMutableArray se redimensionne automatiquement. –

+0

merci beaucoup! –

2

NSMutableArray est pour les objets. Pour les anciens types de données simples, utilisez NSMutableData et les bons vieux types de caractères. C'est un tampon mémoire non structuré redimensionnable, juste ce dont vous avez besoin pour un vecteur de PODs. En ce qui concerne la sécurité de type statique, l'objectif C ne vous en donne pas de toute façon.

EDIT:

Création d'un objet de données mutable avec une taille initiale n CGPoint structs:

NSMutableData *Data = [NSMutableData dataWithLength: n*sizeof(CGPoint)]; 

Placer un pt CGPoint dans le tampon à la position du i-ième:

CGPoint pt; 
NSRange r = {i*sizeof(CGPoint), sizeof(CGPoint)}; 
[Data replaceBytesInRange: r withBytes:&pt]; 

Récupération d'un CGPoint de la i-ième position en pt:

CGPoint pt; 
NSRange r = {i*sizeof(CGPoint), sizeof(CGPoint)}; 
[Data getBytes: &pt range:r]; 

croissance du tableau de n objets:

[Data increaseLengthBy:n*sizeof(CGPoint)]; 

espoir qui le couvre. Reportez-vous à la référence NSMutableData et gardez à l'esprit que toutes les méthodes NSData s'y appliquent.

+0

Salut, CGPoint n'est-il pas un objet? –

+0

Ce n'est pas un objet au sens de l'objectif C. C'est une structure avec deux nombres entiers dedans. CGPoint, CGSize, CGRect - toutes les structures. Contrairement à C++, les structures ObjC sont très différentes des classes. –

+0

merci! Auriez-vous un lien vers un exemple d'utilisation de NSMutabledata? –

Questions connexes