First blood. 首先來說說DEBUG和RELEASE
在iOS中,我們經(jīng)??吹接衐ebug和release兩種模式。其實這兩種模式分別表示發(fā)行版本和調(diào)試版本。
兩種版本中打包的不同設置可以參考:iOS編譯策略Optimization Level問題
Double Kill.來說說#ifdef和#if
#ifdef指的是如果定義了
#if指的基本上就和if語句差不多,這里我不細說(因為不是重點了)
Triple Kill.劃重點了啊(敲黑板啦~~~)
比如說:
#ifdef
//我先做一些事情
#else
//我又不想干了.你打我啊
#endif
就是指如果定義了DEBUG,然后怎么怎么地,布拉布拉布拉,我就不寫,你打我啊.
這句話作為一個iOS開發(fā)我們經(jīng)常寫,但是你們有沒有想過
DEBUG哪兒來的?????在哪兒定義的?????誰定義的??????
上截圖:
第一張是別人項目的此處有個問題:DEBUG 在Debug和Release中都有定義
那么問題來了,這時候是用#ifdef還是#if嘞?自己試去吧.kid

第二張是我自己項目的,沒啥說的.這兩張圖僅僅是個對比~~~

Quadra Kill.后記
#if的使用說明
#if的后面接的是表達式
#if (MAX==10)||(MAX==20)
code...
#endif
它的作用是:如果(MAX==10)||(MAX==20)成立,那么編譯器就會把其中的#if 與 #endif之間的代碼編譯進去(注意:是編譯進去,不是執(zhí)行?。。?/p>
#if defined的使用
#if后面接的是一個宏。
#if defined (x)
...code...
#endif
這個#if defined它不管里面的“x”的邏輯是“真”還是“假”它只管這個程序的前面的宏定義里面有沒有定義“x”這個宏,如果定義了x這個宏,那么,編譯器會編譯中間的…code…否則不直接忽視中間的…code…代碼。
另外 #if defined(x)也可以取反,也就用 #if !defined(x)
#ifdef的使用
#ifdef的使用和#if defined()的用法一致
#ifndef又和#if !defined()的用法一致。
最后強調(diào)兩點:
第一:這幾個宏定義只是決定代碼塊是否被編譯!
第二:別忘了#endif