现在的位置: 首页 > 综合 > 正文

NSLog其实很“贵”

2013年09月06日 ⁄ 综合 ⁄ 共 962字 ⁄ 字号 评论关闭

NSLog其实很“贵” - weiyanen@126 - knight与juan的博客

所以从图中可以看出NSLog的工作主要是分为:1. 输出信息到终端,2. 输出信息到System Log中去。

一般开发的时候程序都是从Xcode中启动,所以这个时候NSLog就具有打印信息到终端的能力就像printf一样(说fprintf(stderr, ….) 更合适一点)。而且很自然也就认为NSLog只是用来打印这些调试信息用的。

但是当程序不是从xcode或者ternimal启动等时,因为stderr不是被定向到标准终端这个时候NSLog的功能就是把信息输入到System Log中去。如果这个时候你也用的stderr输入信息,这个时候stderr会被定向到System
Log
中去。

这样,NSLog在给终端控制台发信息时,还要给系统发Log,资源占用高,所以在程序的release版本中,应把NSlog去掉。


程序员使用NSLog注意事项

在了解了NSLog的工作原理之后,你还敢像只是用printf那样使用NSLog了吗?我可以很负责人的告诉你虽然苹果的设备硬件条件都很牛B,但是NSLog还是是一件非常expensive的事情,主要体现在这两点:

  1. NSLog在打印信息的同时要发送日志,效率低
  2.  序一些调试信息通过NSLog发送到System Log之后,很容易被其他人查看到,对你程序的安全性造成了直接的威胁。除了通过xcodeoganizer可以查看console,在iPhone 有一个叫ConsoleLog的程序可以查看你的这些日志(http://itunes.apple.com/us/app/consolelog
    /id415116252?mt=8)。

所以综合这些因素,我们应该在程序release的时候尽量去掉NSLog,但是如果程序大了一个一个去删NSLog似乎也不现实。于是网上就有不少牛人提供了不少的解决方案。推荐一篇著名的Cocoa Is My Girlfriend“Dropping
NSLog in Release Build” 
http://www.cimgf.com/2009/01/24/dropping-nslog-in-release-builds/ .

原文:http://blog.163.com/weiyanen@126/blog/static/2559640420117215343489/

抱歉!评论已关闭.