Come posso aggiungere oggetti CGPoint a un NSArray in modo semplice?

Ho circa 50 oggetti CGPoint che descrivono qualcosa come un “percorso” e voglio aggiungerli a un NSArray. Sarà un metodo che restituirà il CGPoint corrispondente per un dato indice. Non voglio creare 50 variabili come p1 = …; p2 = …, e così via. C’è un modo semplice che mi permetterebbe di definire quei punti “istantaneamente” quando si inizializza l’NSArray con gli oggetti?

Con UIKit Apple ha aggiunto il supporto per CGPoint a NSValue , quindi puoi fare:

 NSArray *points = [NSArray arrayWithObjects: [NSValue valueWithCGPoint:CGPointMake(5.5, 6.6)], [NSValue valueWithCGPoint:CGPointMake(7.7, 8.8)], nil]; 

Elenca tutte le istanze [NSValue] come hai CGPoint e termina la lista in nil. Tutti gli oggetti in questa struttura sono auto-rilasciati.

Il rovescio della medaglia, quando stai estraendo i valori dall’array:

 NSValue *val = [points objectAtIndex:0]; CGPoint p = [val CGPointValue]; 

Io uso questo:

Crea array:

 NSArray *myArray = @[[NSValue valueWithCGPoint:CGPointMake(30.0, 150.0)],[NSValue valueWithCGPoint:CGPointMake(41.67, 145.19)]]; 

Ottieni il primo object CGPoint:

 CGPoint myPoint = [myArray[0] CGPointValue]; 

Hai dato un’occhiata a CFMutableArray ? Potrebbe funzionare meglio per te.

Puoi anche scrivere questo in modo C / C ++ standard:

 CGPoint oldschool[] = { CGPointMake(5.5, 6.6), CGPointMake(7.7, 8.8) }; CGPoint p2 = oldschool[1];