2009-09-08 4 views
1
NSArray *splitPoints = [routeGeom componentsSeparatedByString:@"], ["]; 
routePoints = malloc(sizeof(CLLocationCoordinate2D) * ([splitPoints count] + 1)); 

int i=0; 
NSArray *coords; 
for (NSString* coordStr in splitPoints) { 

    coords = [coordStr componentsSeparatedByString:@","]; 

    routePoints[i].latitude = [[[coords objectAtIndex:0] substringFromIndex:1]floatValue]; 
    routePoints[i].longitude = [[coords objectAtIndex:1] floatValue]; 

    i++; 

} 
[coords release]; 

NSLog(@"** Time to split the route geometry into structs %f", [NSDate timeIntervalSinceReferenceDate] - start); 
+6

Je me demande combien d'utilisateurs de SO ont juste couru dans ce fil en criant "StringBuilder! StringBuilder" à leur moniteur jusqu'à ce qu'ils voient une question de C. –

Répondre

6

Tenir compte:

char *buf = [coordStr UTF8String]; 
sscanf(buf, "%f,%f", &routePoints[i].latitude, routePoints[i].longitude); 
2

J'envisagerais d'utiliser la chaîne de caractères renvoyée par [coordStr UTF8String] et d'analyser manuellement les caractères.

2

Cela me semble comme un cas où NSScanner serait une victoire. -componentsSeparatedByString et -substringFromIndex vont tous les deux créer des objets tas, ce que vous ne voulez pas faire dans une boucle serrée.

2

Je pensais juste que je sauterais ici et que je dirais que votre ligne [coords release] est inutile (et erronée). Vous devez le supprimer pour éviter les problèmes dans les environnements non GC. Vous n'êtes pas obligé de publier coords car vous ne l'avez pas explicitement créé ou conservé.

Questions connexes