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