ios 巨集定義除錯

2021-07-22 16:11:18 字數 998 閱讀 8236

nslog遮蔽輸出

使用nslog的乙個風險是:它的執行會占用時間和裝置資源。當我們用simulator時,nslog的資源占用並不引人注意,風險也不會顯示出來。但是如果你寫的是乙個即時戰略遊戲,而你在每乙個action中都加入了nslog——那麼nslog將成為乙個魔鬼。災難的具體表現常常是:你在simulator中執行遊戲暢通無阻,但到了真機上,會發現很「卡」,不論是拖動乙個單位還是縮放乙個場景,fps也降到了各位數。

簡單而粗暴的解決方案是:在乙個遊戲release前,將所有的nslog注釋掉。簡單有效,但***是:下次你要除錯時,又得將nslog乙個個取消注釋。

解決方案:你以release模式編譯的程式不會用nslog輸出,而你以debug模式編譯的程式將執行nslog的全部功能。

#ifndef __optimize__

# define nslog(…) nslog(__va_args__)

#else

# define nslog(…) {}

#endif

這個**的魔術在於:release模式通常會定義 __optimize__,當然debug模式不會。將這段**放在你的標頭檔案當中,你就可以放心的使用nslog了!

上面的巨集是使用qdebug輸出除錯資訊,在非qt的程式中也可以改為printf,守護程序則可以改為syslog等等... 其中,決竅其實就是這幾個巨集 ##__va_args__, __file__, __line__ 和__function__,下面介紹一下這幾個巨集:

1) __va_args__ 是乙個可變引數的巨集,很少人知道這個巨集,這個可變引數的巨集是新的c99規範中新增的,目前似乎只有gcc支援(vc6.0的編譯器不支援)。巨集前面加上##的作用在於,當可變引數的個數為0時,這裡的##起到把前面多餘的","去掉的作用,否則會編譯出錯, 你可以試試。

2) __file__ 巨集在預編譯時會替換成當前的源檔名

3) __line__巨集在預編譯時會替換成當前的行號

4) __function__巨集在預編譯時會替換成當前的函式名稱

ios 巨集定義

這個不是ios 應該算是c裡面的 巨集定義巨集定義是c提供的三種預處理功能的其中一種,這三種預處理包括 巨集定義 檔案包含 條件編譯。1 編輯本段引數 不帶引數 巨集定義又稱為巨集代換 巨集替換,簡稱 巨集 格式 define識別符號字串 其中的識別符號就是所謂的符號常量,也稱為 巨集名 預處理 預...

iOS常用巨集定義

獲取當前螢幕的寬高 define kscreenw uiscreen mainscreen bounds size.width define kscreenh uiscreen mainscreen bounds size.height 判斷當前系統版本 define ios9 uidevice c...

iOS 巨集定義規範

1 debug 模式下列印日誌,當前行 ifdef debug define nslog format,do while 0 else define nslog endif2 判斷是真機 還是模擬器 注 記得先判斷是否為模擬器咯,否則會失敗的 if target iphone simulator 模...