为什么这个C风格的代码比这个obj-C风格的代码慢10倍?

And*_*son 3 c iphone cocoa-touch objective-c

// obj C版本,有些 - 在18,000次迭代中不到一秒

for (NSString* coordStr in splitPoints) {

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

  i++;

}
Run Code Online (Sandbox Code Playgroud)

// C版 - 在18,000次迭代中超过13秒

for (i = 0; buf != NULL; buf = strchr(buf,'['), ++i) {

  buf += sizeof(char);
  sscanf(buf, "%f,%f,", &routePoints[i].latitude, &routePoints[i].longitude);

}
Run Code Online (Sandbox Code Playgroud)

作为一个推论问题,有没有办法让这个循环更快?

另见这个问题:另一种速度提升可能吗?

bbu*_*bum 10

测量,测量,测量.

使用仪器中的采样器仪器测量代码.

话虽如此,与Objective-C代码相比,C代码明显效率低下.

也就是说,快速枚举 - for(x in y)语法 - 非常快,更重要的是,它意味着它splitPoints是一个包含已经被解析为单个对象的一堆数据的数组或集合.

strchr()第二个循环中的调用意味着您正在动态解析内容.它本身strchr()就是一个循环操作,并且会消耗时间,因为目标字符出现之间的字符数增加.

但这都是猜想.与所有优化一样,推测是无用的,使用提供的[相当棒的]工具集合收集具体数据是确定的唯一方法.

一旦测量完毕,就可以加快速度.