2010-03-10 14 views

risposta

21

Utilizzare un NSMutableArray, ma inserire solo le strutture CGPoint negli oggetti NSValue. Esempio:

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]; 

Si noti che le +valueWithCGPoint: e CGPointValue metodi sono disponibili solo su iPhone. Tuttavia, se hai bisogno di questo per il Mac, ci sono metodi simili per trattare con NSPoint s, ed è banale convertire un CGPoint in un NSPoint (puoi trasmettere o usare NSPointFromCGPoint()).

+0

Ciao non devi allocare una dimensione per l'array? fa anche addObject ridimensionare l'array se necessario? –

+0

@ jesse.rj - 'NSMutableArray' si ridimensiona automaticamente. –

+0

grazie mille! –

2

NSMutableArray è per oggetti. Per semplici vecchi tipi di dati, usa NSMutableData e buoni vecchi tipi di puntatori. È un buffer di memoria non strutturato ridimensionabile, proprio quello che ti serve per un vettore di POD. Per quanto riguarda la sicurezza del tipo statico, l'obiettivo C non ti dà comunque nulla.

EDIT:

Creazione di un oggetto dati mutabile con una dimensione iniziale n struct CGPoint:

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

Posizionando un CGPoint pt nel buffer nella posizione i-esima:

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

Recupero di un CGPoint dalla i-esima posizione in pt:

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

crescente matrice per n oggetti:

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

speranza che la ricopre. Vedere il riferimento NSMutableData e tenere presente che tutti i metodi NSData si applicano a esso.

+0

Ciao, CGPoint non è un oggetto? –

+0

Non è un oggetto in senso oggettivo C. È una struttura con due numeri interi. CGPoint, CGSize, CGRect - tutte le strutture. A differenza del C++, le strutture di ObjC sono piuttosto diverse dalle classi. –

+0

grazie! Ti capita di avere un link per un esempio di come usare NSMutabledata? –