NSLog效率低下的原因及尝试lldb断点打印Log

小测试
测试下分别使用NSLog和printf打印10000次耗费的时间。CFAbsoluteTimeGetCurrent()函数可以打印出当前的时间戳,精度还是很高的,于是乎测试代码如下:
 
 
  1. CFAbsoluteTime startNSLog = CFAbsoluteTimeGetCurrent(); 
  2. for (int i = 0; i < 10000; i++) { 
  3.     NSLog(@"%d", i); 
  4. CFAbsoluteTime endNSLog = CFAbsoluteTimeGetCurrent(); 
  5.  
  6. CFAbsoluteTime startPrintf = CFAbsoluteTimeGetCurrent(); 
  7. for (int i = 0; i < 10000; i++) { 
  8.     printf("%d\n", i); 
  9. CFAbsoluteTime endPrintf = CFAbsoluteTimeGetCurrent(); 
  10.  
  11. NSLog(@"NSLog time: %lf, printf time: %lf", endNSLog - startNSLog, endPrintf - startPrintf); 
这个时间和机器肯定有关系,只看它们的差别就好。为了全面性,尝试了三种平台:
 
 
  1. NSLog time: 4.985445, printf time: 0.084193 // mac 
  2. NSLog time: 5.562460, printf time: 0.019408 // 模拟器 
  3. NSLog time: 10.471490, printf time: 0.090503 // 真机调试(iphone5) 
可以发现,在mac上(模拟器其实也算是mac吧)速度差别达到了60倍左右,而真机调试甚至达到了离谱的100多倍。
 
探究原因
基本上这种事情一定可以在Apple文档中找到,看NSLog的文档,第一句话就说:Logs an error message to the Apple System Log facility.,所以首先,NSLog就不是设计作为普通的debug log的,而是error log;其次,NSLog也并非是printf的简单封装,而是Apple System Log(后面简称ASL)的封装。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值