iOS開發之NSLog的使用

我們在調試程序時,經常會使用NSLog函數打印出一些日誌信息。當我們準備發佈程序時,則不希望這樣的調試日誌出現。我們會自定義這個函數,在debug的時候,正常打印出我們所需要的內容,但在release版本時,則關閉日誌輸出。

更多的,我們會這樣去寫:

#ifdef DEBUG
    #define SKLog(farmat, ...) NSLog(farmat, ##__VA_ARGS__)
#else
    #define SKLog(farmat, ...) nil
#endif

或者更詳細的日誌:

#ifdef DEBUG
    #define SKLog(farmat, ...)  NSLog(@"file:%s\t function:%s\t line:%d\t %s\n", [[[NSString stringWithUTF8String:__FILE__] lastPathComponent] UTF8String], __FUNCTION__, __LINE__,[[NSString stringWithFormat:farmat, ##__VA_ARGS__] UTF8String])
#else
    #define SKLog(farmat, ...) nil
#endif

雖然我們經常這樣去使用這樣的宏,但每個參數究竟是什麼意思呢?

    __FILE__ :在編譯時會替換成當前的源文件路徑,本例子中,我們只取源文件名
    __FUNCTION__ :在編譯時會替換成當前的函數名稱
    __LINE__ :在編譯時會替換成當前的行號
    __VA_ARGS__:一個可變參數的宏,前面加##的作用在於,當可變的參數個數爲0時,這裏 ## 起到把前面多餘的逗號‘,’去掉的作用


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章