1. 程式人生 > >巨集定義重寫NSLog

巨集定義重寫NSLog


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

      步驟比較簡單,只需要 在ProjectName_Prefix.pch 中追加你對應的巨集定義,不用import 就可以直接使用了。

       巨集定義寫法如下:

  1. #ifdef DEBUG  
  2. #define LOG(...) NSLog(__VA_ARGS__);  
  3. #define LOG_METHOD NSLog(@"%s", __func__);  
  4. #else  
  5. #define LOG(...); #define LOG_METHOD;  
  6. #endif  


   這樣設定後,只需要在Product ->Scheme->Edit Scheme ->info選擇,是release ,還是debug版本即可。如果debug 版本,則答應log,若release版本則不列印。

我們釋出到appstore 上的版本均是release版本,這裡簡單說下這兩個版本的差異。
       release 是發行版本,比debug版本要小一些,他們呼叫兩個不同底層庫,debug 包含的資訊多,可以斷點除錯,單步執行,使用使用TRACE/ASSERT等除錯輸出語句,
但是release 版本不包含除錯資訊,執行速度比較快。
另外在此處設定的DEBUG 引數可以在下面的路徑進行設定:工程->Target->Build Setting ->Preprocessor Macros。
預設系統已經給出了DEBUG的引數。如果要增加新的引數,則在哪裡進行增加
轉載:http://blog.csdn.net/wscqqlucy/article/details/8617946?reload

相關推薦

巨集定義重寫NSLog

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

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

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

iOS通過巨集定義設定NSLog打印出類名、方法名和NSLog所在行數以及PCH的作用

NSLog函式真機不列印 在實際專案中NSLog函式列印資訊是必不可少的事情,可以友好的幫助我們除錯程式,然而在模擬器上佔用的是電腦的記憶體,但在真機上線時如果不把NSLog函式遮蔽掉,勢必會造成

iOS中在.pch中加入__OBJC__的作用是什麼?以及NSLog巨集定義

大家在寫程式的時候都會為了避免程式碼麻煩,會在專案中新增.pch檔案,那麼檔案中的#ifdef __OBJC__  有什麼作用呢,這句話的意思就是保證在#ifdef中的巨集定義只會在OC的程式碼中被引用,否則,一旦引入C/C++的程式碼或者框架,就會出錯! 還有就是很多同學

lua裡實現類似巨集定義,動態生成程式碼

其實就是用了  lua 的 loadstring 功能。 1.把需要動態生成的程式碼拼接成為一個字串。 str 2. loadstring(str)   這個只是解析了程式碼,相當於一個function   需要 執行一下才會生效

c語言巨集定義#define

1. 利用define來定義 數值巨集常量     #define 巨集定義是個演技非常高超的替身演員,但也會經常耍大牌的,所以我們用它要慎之又慎。它可以出現在程式碼的任何地方,從本行巨集定義開始,以後的程式碼就就都認識這個巨集了;也可以把任何東西定義成巨集。因為編譯器會在預編譯的時候用真身替換

C語言開關巨集定義的學習##__VA_ARGS__

最近寫c程式,學到一種開關巨集,極大提高程式的控制性: #define __DEBUG #ifdef __DEBUG #define tnfs_print(format, ...) printf (format, ##__VA_ARGS__) #else #define tnfs_print

cocos2dx 常用函式和巨集定義

最近我們的cocos2d-x遊戲專案已經進入了正式開發的階段了,幾個dev都辛苦碼 程式碼。cocos2d-x還是一套比較方便的api的,什麼action啊、director啊、ccpoint啊都蠻便捷的。但是我看到幾個dev有時 候會很不知道用它們,還是首先自己去寫函式…… 用一些比較原始

巨集定義的用法

有五種用法,含有引數和不含引數,行尾都不用加分號 #define   <識別符號>  [<替換列表>] //類似於全域性變量了 //如果其他檔案沒有包含定義巨集的檔案,則在巨集定義的位置結束,如果有包含,則到包含的檔案結束 #de

行內函數,巨集定義,記憶體對齊,型別轉換

巨集 與 inline的區別 存在的價值,兩者都是文字替換,降低程式跳轉次數,提高效率 1. define 是預處理命令,無法除錯 ,最簡單文字替換,     inline 是編譯期替換,可以除錯, 存在引數型別檢查 2. 使用inline的時候,函式必須定義   直接定義的函式

C/C++中標準巨集定義及其用法

ANSI C標準中有幾個標準預定義巨集 __func__:在原始碼中插入當前所在函式名; __LINE__:在原始碼中插入當前原始碼行號; __FILE__:在原始檔中插入當前原始檔名; __DATE__:在原始檔中插入當前的編譯日期 __TIME__:在原始檔

除錯技巧:封裝printf列印除錯資訊和巨集定義開關

/* #define DEBUG */ #ifdef DEBUG #define DEBUG_ERR(format, ...) \ do{ \ printf("\r\n"); \ printf("FILE: "__FILE__", LINE: %

巨集定義一些用法

一:引數名必須保持一致: #define Fun(a,b) f(a,b) Fun(1,2) ===>f(1,2) #define Fun(a,b) f(a1,b2) Fun(1,2) ==>f(a1,b2) 二:##一些注意事項 #define SIGN(x) INT_x SIGN(3)

如何通過 讀取配置引數 而不是 預編譯 巨集定義方式 來決定是否執行printf函式

在一個專案中,本來開始決定通過巨集定義方式來決定是否進行 printf 列印除錯資訊的,但後面考慮到使用配置引數的方式應該更好,因為通過巨集定義方式,還需要再編譯一遍程式才能進行顯示,而通過讀取配置引數方式,只需要在配置檔案中更改配置項即可,這樣更符合實際需要。  大致思路:先將需要列

C中的預編譯巨集定義

  在將一個C源程式轉換為可執行程式的過程中, 編譯預處理是最初的步驟. 這一步驟是由前處理器(preprocessor)來完成的. 在源流程式被編譯器處理之前, 前處理器首

Android.mk中新增巨集定義

在Boardconfig.mk 中新增一個 IMAGE_FOR_FACTORY_TEST:= true 由於Boardconfig.mk和各目錄的Android.mk是相互關聯的 所以我們可以在Android.mk 中新增 一個 ifdef IMAGE_FOR_FACTO

_T 巨集定義

_T 是一個巨集定義,作用是讓你的程式支援 Unicode 編碼 因為 Windows 使用兩種字符集 ANSI 和 UNICODE前者就是通常使用的單位元組方式,但這種方式處理像中文這樣的雙位元組字元不方便,容易出現半個字元的情況,而後者都是雙位元組方式,方便處理雙位元組字元。Wind

巨集定義與符號常量

在C中,“巨集”分為無引數的巨集和有引數的巨集兩種 無參巨集定義 (1)無參巨集定義的一般格式:#define 識別符號 語言符號 字串 其中:"define"為巨集定義命令;"識別符號"為所定義的巨集名,通常用大寫字母表示,以便於與變數區別;“語言符號字串”可以是常數,表示式,

Unity中的巨集定義

巨集定義的使用場合:    在程式中我們想要根據不同的執行環境去執行不同的程式碼時使用。比如我們在PC上和安卓上需要執行不同的程式碼,我們就可以使用Unity自帶的巨集定義來區分。 Unity中自帶的巨集定義: UNITY_EDITOR 編譯器呼叫; UNITY_

【轉】巨集定義中#和##的使用

https://www.cnblogs.com/zhongzhe/p/3892682.html   #的功能是將其後面的巨集引數進行字串化操作(Stringfication),簡單說就是在對它所引用的巨集變數通過替換後在其左右各加上一個雙引號 ##被稱為連線符(concatenator),用來