1.NSLog就不是设计作为普通的debug log的,而是error log(源自官方文档:Logs an error message to the Apple System Log facility.)
2.NSLog也并非是printf的简单封装,而是Apple System Log(后面简称ASL)的封装。
3.NSLog会向ASL写log,同时向Terminal写log,而且同时会出现在Console.app中(Mac自带软件,用NSLog打出的log在其中全部可见);不仅如此,每一次NSLog都会新建一个ASL client并向ASL守护进程发起连接,log之后再关闭连接。所以说,当这个过程出现N次时,消耗大量资源导致程序变慢也就不奇怪了。
4.此外,还有个值得注意的问题是NSLog每次会将当前的系统时间,进程和线程信息等作为前缀也打印出来,如:
2017-11-15 11:324:53.731 XXXXXXX
当然这些也可能是作为ASL的参数创建的,但不论如何,一定是有消耗的。
解决方法:
1.代码提交的时候就是删掉代码中的打印信息
2.在Debug模式以及Release模式下,采用宏来控制打印信息,release的时候把NSLog的打印信息都关掉
3.使用替代品来替换掉NSLog,比如CocoaLumberjack,当然自己封装一个简单的日志系统也可以