仅作学习记录备忘。
大量的NSLog会拖慢程序的运行速度。
NSLog 的 Apple 文档里,第一句话就说:Logs an error message to the Apple System Log facility. 所以 NSLog 不是设计用来普通的debug log的,而是error log;而且 NSLog 并不是 printf 的简单封装,而是Apple System Log 的封装。
Apple System Log 大概就是个系统级别的log工具,syslog 的替代版,提供了一系列强大的 Log 功能。不过一般我们接触不到,NSLog就对它提供了高层次的封装,一些底层相关的守护进程 (deamons) 不会 link 如 Foundation 等高层框架,所以 ASL 用在这儿正合适;而对于应用层的用 NSLog。
NSLog 会向 ASL 写 Log,同时向 Terminal 写 Log,而且同时会出现在 Console.app 中(Mac 自带软件,用 NSLog 打出的 Log 在其中全部可见);不仅如此,每一次 NSLog 都会新建一个 ASL client 并向 ASL 守护进程发起连接,Log 之后再关闭连接。所以说,当这个过程出现N次时,消耗大量资源导致程序变慢也就不奇怪了。
解决:
拒绝残留的Log。现在项目都是多人共同开发,我们应该只把 Log 作为错误日志或者重要信息的日志使用,commit前请把自己调试的 Log 去掉。
尝试使用断点+ lldb 调试器打 Log,如简单断点+ po(p) 、 Condition和 Action 断点等。