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);
答案 0 :(得分:6)
考虑:
char *buf = [coordStr UTF8String];
sscanf(buf, "%f,%f", &routePoints[i].latitude, routePoints[i].longitude);
答案 1 :(得分:2)
我会考虑使用[coordStr UTF8String]返回的c-string并手动解析字符。
答案 2 :(得分:2)
在我看来,NSScanner就是一个胜利的案例。 -componentsSeparatedByString和-substringFromIndex都将创建堆对象,这是您不希望在紧密循环中执行的操作。
答案 3 :(得分:2)
我只是想我会跳到这里并说你的行[coords release]
是不必要的(而且是错误的)。您应该将其删除以避免在非GC环境中出现问题。您不必释放coords
,因为您没有明确创建或保留它。