黑马程序员技术交流社区

标题: NSLog比printf性能为什么差这么多 [打印本页]

作者: sabjiang    时间: 2014-4-26 23:08
标题: NSLog比printf性能为什么差这么多
本帖最后由 sabjiang 于 2014-4-29 12:09 编辑
  1. CFAbsoluteTime startNSLog=CFAbsoluteTimeGetCurrent();
  2.     for (int i=0; i<10000; i++) {
  3.         NSLog(@"%d",i);
  4.     }
  5.     CFAbsoluteTime endNSLog=CFAbsoluteTimeGetCurrent();
  6.    
  7.     CFAbsoluteTime startPrinft=CFAbsoluteTimeGetCurrent();
  8.     for (int i=0; i<10000; i++) {
  9.         printf("%d\n",i);
  10.     }
  11.     CFAbsoluteTime endPrintf=CFAbsoluteTimeGetCurrent();
  12.     NSLog(@"NSLog time:%lf, printf time :%lf",endNSLog-startNSLog,endPrintf-startPrinft);
复制代码


用NSLog和printf分别答应10000条数据,统计两者的耗时,如下:
NSLog time:2.005033, printf time :0.055691
请教大神分析下两者的区别,反正NSLog应该不是printf的封装,NSLog每次还会打印出系统自带的一些东东,能去掉吗


作者: Freedam    时间: 2014-4-26 23:17
NSLog比printf慢是应当的,因为NSLog不仅要在终端上显示打印信息还要将打印信息写进system.log日志中去,所以肯定会比只做打印输出的printf慢。
作者: 戴文婷    时间: 2014-4-26 23:27
NSLog比 printf 的功能多嘛。觉得,出了楼上说的日志功能外,应该还有。判断类,然后输出类的功能,肯定会加更加多的代码,执行的代码多。效率当然就低了
作者: 傘が咲く    时间: 2014-4-26 23:27
首先,到NSObjCRuntime.h中看到,NSLog的定义格式是:void NSLog(NSString *format, …);他是传递一个字符串对象,而printf()是c的函数,并没有对象的概念,这里效率不同,这是其一。
其次相对printf()来说NSLog()会自己加上换行符,NSLog()在Debug下会写到system.log中,NSLog()会自动加上时间和进程信息.
所以,你看到差别那么大。希望对你有帮助!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2