iOS開發,#define的使用(系列一)

一、判斷當前設備是否是iOS7以上版本spa

#define IOS_VERSION_7_OR_ABOVE (([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0)? (YES):(NO))指針

若是判斷系統的設備在項目中使用頻繁,那麼就將這個宏在.pch文件中定義,這樣就能夠在整個項目中使用這個宏。code

使用的時候最好是用if-elseorm

if(IOS_VERSION_7_OR_LATER)開發

{字符串

    NSLog(@"iOS7 or Later");
it

}io

else編譯

{變量

    NSLog(@"Version before iOS7");

}

若是使用#if-#else-#endif,此時是會報錯的,

#if IOS_VERSION_7_OR_LATER

    //這是iOS7或更高版本

#else

    //這是iOS7以前的版本

#endif

爲何會有錯誤呢,由於iOS項目在判斷系統版本的宏IOS_VERSION_7_OR_ABOVE的語法是動態的,也就是在運行時判斷的,這回根據你運行真機的不一樣系統得出不一樣的值;而#if-#else-#endif判斷語句中是靜態編譯的,就是裏面的語句在Xcode編譯的時候就要肯定無誤的,而如今的判斷條件IOS_VERSION_7_OR_ABOVE是運行時候才能知道的確切數值,運行時是在編譯的後面的過程,這時候就產生了矛盾,Xcode報錯。打個比方來講,你想買個100塊錢的籃球,if-else就是能夠支持信用卡消費,你如今沒錢,能夠先買了,等到你賺了錢再還,賺了錢這個時刻類比就是運行時判斷了系統的版本;而#if-#else-#endif只支持現金消費,它只要求你如今有錢,若是如今沒錢,對不起,這個籃球不賣。

二、typedef和#define的區別

(1)typedef是類型定義,它是語言編譯過程中的一部分,咱們在iOS開發過程當中常常將typedef和枚舉enum一塊兒使用,好比下面的代碼,

typedef enum _OperateType{

    InsertOperateType = 0,

    UpdateOperateType,

    DeleteOperateType,

}OperateType;

這時候OperateType就是一個數據類型,該類型的變量只能是InsertOperateType、UpdateOperateType和DeleteOperateType三種數值。

(2)#define本質上就是文本替換,它自己並不在編譯過程當中執行,而是在以前(預處理過程)就已經完成了。

二者的區別:

宏定義只是簡單的字符串替換(原地擴展),而typedef則不是原地擴展,它的新名字具備必定的封裝新,因此新命名的標識符具備定義變量的功能,看下面的代碼以及講解,

typedef (int *) pINT1;

#define pINT2 int*;

使用pINT一、pINT2來定義變量

pINT1 a,b;--等價於-- int *a;int *b;表示定義了兩個指向整型變量的指針a和b

pINT2 a,b;--等價於-- int  *a,b;表示定義了一個指針變量a,一個整型變量b

經過上面簡單的說明,相信能夠有點了解了吧。

相關文章
相關標籤/搜索