根據Debug和Release狀態的變化來屏蔽日誌輸出

轉的,在哪轉的忘了,本身又作了一些整理。 xcode

咱們平時在開發應用的時候,常常會用到 NSLog 來調試咱們的程序,而隨着項目愈來愈大,這些用於調試的日誌輸出就會變得很難管理。 發佈正式版的時候必定要屏蔽掉全部後臺輸出,由於這些輸出仍是比較消耗系統資源的。  每每到了這個時候,咱們不得不去一行一行的找到 NSLog 調用,而後註釋掉。 這樣作在項目小的時候還比較有效,但隨着項目規模的增加,就會變得愈來愈難控制。  下面就給你們介紹一個簡單的方法,讓咱們在生成 Release 版本時不須要進行任何更改便可屏蔽全部的 Log 輸出。 工具

    首先咱們先要定義這樣一段預處理命令,文件名隨便起,例如 CLog.h 開發工具

    #ifdef DEBUG
    #define CLog(format, ...) NSLog(format, ## __VA_ARGS__)
    #else
    #define CLog(format, ...)
    #endif
spa

    這裏咱們判斷 DEBUG 這個宏是否認義,若是有定義咱們就將這個 CLog 宏替換成 NSLog 調用,而若是沒有定義過 DEBUG 標誌咱們就直接跳過。這點應該不難理解。 debug

    檢查 DEBUG 標誌是否正肯定義,Xcode 通常會在 debug 運行配置項裏面已經定義號了DEBUG 標誌,若是沒定義咱們就本身寫上,以個人 Xcode 4 爲例,以下圖: 調試

    找到 PreProcessor Macros 這個屬性,對於 Debug 配置咱們給他寫上 DEBUG,而在 Release 配置中把它留空。 這樣咱們剛纔那段預處理命令就能夠根據這個標誌來判斷咱們編譯的時調試版本仍是發佈版本,從而控制 NSLog 的輸出。 (由於 Xcode 4 會把 debug/release 兩個配置項同時對比展示出來,而 3.x 版本的只能分別設置,若是你用的時xcode 3.x 開發工具, 那麼就分別對 Debug/Release 都檢查一下)。 日誌

    到了這裏咱們這個判斷工做就都進行完了,不過這裏還有一點比較麻煩,就是咱們若是想實用 CLog 宏,就必需要導入 CLog.h 這個頭文件。 不過 Xcode 爲咱們提供了一種很是巧妙的解決辦法。 咱們本身看一下項目裏的文件,是否是有一個叫作 xxx-prefix.pch 的文件,只要注意到 pch 這個擴展名就能夠了。 這個文件是作什麼用的呢? 下面是一個 pch 文件的樣本: code

    //
    // Prefix header for all source files
    //
    #import <Availability.h>
    #ifndef __IPHONE_3_0
    #warning "This project uses features only available in iPhone SDK 3.0 and later."
    #endif
    #ifdef __OBJC__
        #import <UIKit/UIKit.h>
        #import <Foundation/Foundation.h>
    #endif
orm

    這裏引入了一些頭文件, 實際上是 Xcode 的一種預編譯機制,咱們在編譯一個項目的時候,會有不少經常使用的源文件,而且這些代碼文件幾乎不被修改,因此 Xcode 對這些文件只在早期進行一次編譯,以便咱們之後的屢次構建過程當中反覆實用。 例如這裏的 UIKit 和 Foundation ,這樣的機制能夠加快咱們每次構建項目的速度。 固然這裏咱們沒必要太深究它,知道它的做用後,咱們就能夠利用它來爲咱們的開發提供便利。 咱們只須要將剛剛創建的 CLog.h 也在這裏面引入一下,這樣咱們項目中的全部文件就都可以訪問到咱們剛剛定義的 CLog 宏了。 下面是完成後的 pch 文件: 資源

    #import <Availability.h>
    #ifndef __IPHONE_3_0
    #warning "This project uses features only available in iPhone SDK 3.0 and later."
    #endif
    #ifdef __OBJC__
        #import <UIKit/UIKit.h>
        #import <Foundation/Foundation.h>
        #import "CLog.h"
    #endif

    這樣,咱們的 CLog 就完成了,如今能夠在任何一個源文件中實用 CLog 宏來輸出日誌,預處理命令會自動判斷當前的編譯配置,若是是 Debug,就會輸出日誌,反之則什麼都不會輸出。

相關文章
相關標籤/搜索