僅作學(xué)習(xí)記錄備忘。
大量的NSLog會拖慢程序的運(yùn)行速度。
NSLog 的 Apple 文檔里,第一句話就說:Logs an error message to the Apple System Log facility. 所以 NSLog 不是設(shè)計用來普通的debug log的,而是error log;而且 NSLog 并不是 printf 的簡單封裝,而是Apple System Log 的封裝。
Apple System Log 大概就是個系統(tǒng)級別的log工具,syslog 的替代版,提供了一系列強(qiáng)大的 Log 功能。不過一般我們接觸不到,NSLog就對它提供了高層次的封裝,一些底層相關(guān)的守護(hù)進(jìn)程 (deamons) 不會 link 如 Foundation 等高層框架,所以 ASL 用在這兒正合適;而對于應(yīng)用層的用 NSLog。
NSLog 會向 ASL 寫 Log,同時向 Terminal 寫 Log,而且同時會出現(xiàn)在 Console.app 中(Mac 自帶軟件,用 NSLog 打出的 Log 在其中全部可見);不僅如此,每一次 NSLog 都會新建一個 ASL client 并向 ASL 守護(hù)進(jìn)程發(fā)起連接,Log 之后再關(guān)閉連接。所以說,當(dāng)這個過程出現(xiàn)N次時,消耗大量資源導(dǎo)致程序變慢也就不奇怪了。
解決:
拒絕殘留的Log。現(xiàn)在項(xiàng)目都是多人共同開發(fā),我們應(yīng)該只把 Log 作為錯誤日志或者重要信息的日志使用,commit前請把自己調(diào)試的 Log 去掉。
嘗試使用斷點(diǎn)+ lldb 調(diào)試器打 Log,如簡單斷點(diǎn)+ po(p) 、 Condition和 Action 斷點(diǎn)等。