感谢回答这个问题(This loop is very slow, I think because I create a lot of intermediate strings. How can I speed it up?)的人,我能够加速我的代码许多数量级。
不过,我想我可以做得更好一些有没有可能避免在这里创建一堆NSString,而将大的NSString(routeGeom)拆分成一堆char缓冲区并遍历它们?
我从来没有做过任何C编程,所以如果你知道如何做到这一点,将非常感谢!

NSTimeInterval start = [NSDate timeIntervalSinceReferenceDate];

NSString *routeGeom = [pieces objectAtIndex:1];
NSArray *splitPoints = [routeGeom componentsSeparatedByString:@"],["];

routePoints = malloc(sizeof(CLLocationCoordinate2D) * ([splitPoints count] + 1));

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

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

  i++;

}

最佳答案

移除重定位,有更好的方法另外,不应该使用arrayname[index]在循环上迭代用指针代替

int array[5000];
int* intPointer = &array;
for(int i=0;i<5000;i++,intPointer++)
    *intPointer = something

Doing&routePoints[i]强制CPU在每个循环中多次执行“&routePoints+i*sizeof(cllocationcoordinated2d)”。
我强烈建议你买一本关于C的书来学习它从长远来看,你会受益的。
我知道这个答案并不能马上帮到你,但是用C把一个很长的字符串分解成更小的字符串实际上是一件非常普通和简单的事情(以非常快速和高效的方式)。

关于iphone - 还有可能提高速度吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1397040/

10-10 20:39