1.NSLog就不是設(shè)計(jì)作為普通的debug log的,而是error log(源自官方文檔:Logs an error message to the Apple System Log facility.)
2.NSLog也并非是printf的簡(jiǎn)單封裝,而是Apple System Log(后面簡(jiǎn)稱ASL)的封裝。
3.NSLog會(huì)向ASL寫log,同時(shí)向Terminal寫log,而且同時(shí)會(huì)出現(xiàn)在Console.app中(Mac自帶軟件,用NSLog打出的log在其中全部可見);不僅如此,每一次NSLog都會(huì)新建一個(gè)ASL client并向ASL守護(hù)進(jìn)程發(fā)起連接,log之后再關(guān)閉連接。所以說,當(dāng)這個(gè)過程出現(xiàn)N次時(shí),消耗大量資源導(dǎo)致程序變慢也就不奇怪了。
4.此外,還有個(gè)值得注意的問題是NSLog每次會(huì)將當(dāng)前的系統(tǒng)時(shí)間,進(jìn)程和線程信息等作為前綴也打印出來,如:
2017-11-15 11:324:53.731 XXXXXXX
當(dāng)然這些也可能是作為ASL的參數(shù)創(chuàng)建的,但不論如何,一定是有消耗的。
解決方法:
1.代碼提交的時(shí)候就是刪掉代碼中的打印信息
2.在Debug模式以及Release模式下,采用宏來控制打印信息,release的時(shí)候把NSLog的打印信息都關(guān)掉
3.使用替代品來替換掉NSLog,比如CocoaLumberjack,當(dāng)然自己封裝一個(gè)簡(jiǎn)單的日志系統(tǒng)也可以