2012-09-17 61 views
6

在搜索此內容時,我只能找到其他語言的信息。我想知道編寫條件statments如最佳實踐:Xcode - 條件開發或生產模式

if (DEV_MODE){ 
    //do something 
}else{ 
    //do the real stuff 
} 

然後在一些全球性的文件或關閉設置DEV_MODE,所以我只需要改變,要開啓或關閉,而不是在多個更改代碼的地方。我有一些想法,但我正在尋找建議,以便做到這一點。

+0

你想在編譯時確定DEV_MODE嗎?或者你想在運行時改變'DEV_MODE'而不用重新編譯? –

回答

14

試試這個:

#ifdef DEBUG 
    // do stuff 
#endif 

目前Xcode版本自動在新項目中設置此宏。轉到您的項目構建設置以確保。如果沒有的話,你必須自己動手添加:

enter image description here

+0

是的,我的設置反映了這一點。所以我不需要改變任何事情嗎?我假設當我使用AppStore方案時,DEBUG將自動爲0。 – soleil

0

在您的項目設置中有一個名爲「預處理器宏」的部分。在這一節中,您可以爲您的Debug版本添加一個字符串,例如「DEV_MODE」或任何您想要的。然後,您可以按照上面列出的條件進行操作,當您的應用程序爲「發佈」或任何其他不包含宏的設置構建時,您的支票應該會失敗。

1

預處理程序變量是你想要的東西,在你的構建配置定義一個變量(DEV_MODE例如),然後用預處理的檢查,如:

#if DEV_MODE 
    //dev mode code 
#else 
    //non-dev mode code 
#endif 
+0

更好使用'DEBUG',默認情況下它是由Xcode定義/未定義的(當然這不是使用另一個IDE /一個命令行工具鏈的情況)。 – 2012-09-17 17:39:51

8

(這個問題是不相關的Xcode

這就是說,而不是與C風格的IF污染你的代碼,您可以使用預處理器指令來過濾調試和發佈模式。據我所知,如果在測試模式下將DEBUG宏定義爲1,並且在發佈模式下不定義它,這是常見的做法。 (另外,Xcode可以爲你定義這個,我已經看到這種行爲是依賴的。)原因是預處理器的使用更具可讀性,因爲它沒有進入縮進,它更好地與代碼可視化。綜上所述,嘗試

#ifdef DEBUG 
    // do debug stuff here 
#else 
    // do release stuff here 
#endif 

一個額外的參數進行預處理宏是可以實現條件的全局命名空間,你不能用C代碼中。一,即,用預處理宏,你可以寫

#ifdef DEBUG 
    int functionOne() 
    { 
    } 
#else 
    char *functionTwo(int a) 
    { 
    } 
#endif 

你不能沒有預處理做到這一點。

+0

感謝您的解釋。 – soleil