A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© sabjiang 中级黑马   /  2014-4-26 23:08  /  1721 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 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每次还会打印出系统自带的一些东东,能去掉吗

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

3 个回复

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

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

回复 使用道具 举报 1 0
您需要登录后才可以回帖 登录 | 加入黑马