巨集定義重寫NSLog

2021-08-14 04:05:26 字數 1263 閱讀 4452

#define debug

//巨集輸出函式

#ifdef debug

#define mylog

(fmt, ...)  fprintf(stderr,"[%s:%d行] %s\n",[[[nsstring stringwithutf8string:__file__] lastpathcomponent] utf8string], __line__, [[nsstring stringwithformat:fmt, ##__va_args__] utf8string]);//帶檔名 行數

#define mylog(fmt, ...) nslog((@"%s," "[linenum:%d]" fmt) , __function__, __line__, ##__va_args__); //帶函式名和行數

#define mylog(fmt, ...) nslog((@"===[linenum:%d]" fmt), __line__, ##__va_args__);  //帶行數

#define mylog(fmt, ...) nslog((fmt), ##__va_args__); //不帶函式名和行數

#else

#define mylog(fmt, ...)

#define 

mylog

(fmt, ...)

#define mylog(fmt, ...)

#define mylog(fmt, ...)

#endif

只需要在product ->scheme->edit scheme ->info選擇,是release ,還是debug版本即可。如果debug 版本,則答應log,若release版本則不列印。

release 是發行版本,比debug版本要小一些,他們呼叫兩個不同底層庫,debug 包含的資訊多,可以斷點除錯,單步執行,使用使用trace/assert等除錯輸出語句,

但是release 版本不包含除錯資訊,執行速度比較快。

另外在此處設定的debug 引數可以在下面的路徑進行設定:工程->target->build setting ->preprocessor macros。預設系統已經給出了debug的引數。如果要增加新的引數,則在**進行增加

——file——巨集在預編譯時,會替換成當前的原始檔名字

——line——替換成當前的行號

——function——替換成當前的函式的名稱

——va—args——可變引數的巨集,巨集前面加上##作用在於:噹噹可變引數的個數為0 的時候,這裡的##起到把前面多餘的,去掉的作用。否則編譯出錯。

重寫系統NSLog 巨集定義

在程式執行過程中,通常會列印一些資訊來幫助我們跟蹤執行定位,但是程式中過多的nslog在執行過程中是非常耗記憶體的,然而使用者在使用時並需要這些追蹤資訊。弊端 1 消耗手機執行記憶體 2 不可避免的洩露一些敏感資訊 重寫nslog,debug模式下列印日誌和當前行數 if debug define ...

利用巨集定義控制nslog 的輸入輸出

在專案的過程中,經常遇到要在除錯的時候列印log,但是上線或是release 的時候不需要去顯示log 的情況,此時你辛辛苦苦寫了那麼多的log,你要麼就手動注釋掉,要麼就是設乙個開關變數,企圖用這個總開關開啟。其實可以充分利用巨集定義進行設定。步驟比較簡單,只需要 在 projectname pr...

ios開發 巨集定義實現NSLog不列印設定

我們可以在發布版本前先把所有nslog語句注釋掉,等以後要除錯時,再取消這些注釋,這實在是一件無趣而耗時的事!還好,還有更優雅的解決方法,就是在專案的prefix.pch檔案裡加入下面一段 加入後,nslog就只在debug下有輸出,release下不輸出了。在 prefix.pch pch全稱是 ...