所以可以看出NSLog的工作主要是分為:1. 輸出資訊到終端,2. 輸出資訊到System Log中去。
一般開發的時候程式都是從Xcode中啟動,所以這個時候NSLog就具有列印資訊到終端的能力就像printf一樣(說fprintf(stderr, ….) 更合適一點)。而且很自然也就認為NSLog只是用來列印這些調試資訊用的。
但是當程式不是從xcode或者ternimal啟動等時,因為stderr不是被定向到標準終端這個時候NSLog的功能就是把資訊輸入到System Log中去。如果這個時候你也用的stderr輸入資訊,這個時候stderr會被定向到System
Log中去。
這樣,NSLog在給終端控制台發資訊時,還要給系統發Log,資源佔用高,所以在程式的release版本中,應把NSlog去掉。
程式員使用NSLog注意事項
在瞭解了NSLog的工作原理之後,你還敢像只是用printf那樣使用NSLog了嗎?我可以很負責人的告訴你雖然蘋果的裝置硬體條件都很牛B,但是NSLog還是是一件非常expensive的事情,主要體現在這兩點:
- NSLog在列印資訊的同時要發送日誌,效率低
- 程 序一些調試資訊通過NSLog發送到System Log之後,很容易被其他人查看到,對你程式的安全性造成了直接的威脅。除了通過xcode的oganizer可以查看console,在iPhone上 有一個叫ConsoleLog的程式可以查看你的這些日誌(http://itunes.apple.com/us/app/consolelog
/id415116252?mt=8)。
所以綜合這些因素,我們應該在程式release的時候盡量去掉NSLog,但是如果程式大了一個一個去刪NSLog似乎也不現實。於是網上就有不少牛人提供了不少的解決方案。推薦一篇著名的Cocoa Is My Girlfriend的“Dropping
NSLog in Release Build” : http://www.cimgf.com/2009/01/24/dropping-nslog-in-release-builds/ .
原文:http://blog.163.com/weiyanen@126/blog/static/2559640420117215343489/