宏即 替換!在預處理階段展開,僅展開,不作任何類型檢查。
#空指令,沒有任何效果
#include 包含一個源代碼文件
#include_next 與#include相似, 但它有着特殊的用途
#define 定義宏
#undef 取消宏的定義
#undef 取消定義宏
#if 如果條件爲真,則編譯下面的代碼
#elif 若#if, #ifdef, #ifndef或前面的#elif條件不滿足, 則執行#elif之後的語句, 相當於C語法中的else-if
#else 與#if, #ifdef, #ifndef對應, 若這些條件不滿足, 則執行#else之後的語句, 相當於C語法中的else
#endif #if, #ifdef, #ifndef這些條件命令的結束標誌.
#ifdef 如果已經定義了某個宏,則編譯下面的代碼
#ifndef 如果沒有定義某個宏,則編譯下面的代碼
#error 停止編譯並顯示錯誤信息
#line 標誌該語句所在的行號
# 將宏參數替代爲以參數值爲內容的字符竄常量
## 將兩個相鄰的標記(token)連接爲一個單獨的標記
#pragma 說明編譯器信息#warning 顯示編譯警告信息
#error 顯示編譯錯誤信息
例: #ifdef kShowButton //如果此宏已定義 則執行
[self.view addSubview:btn];
#endif
下面列舉一些常用宏定義:
#define kScreenWidth [UIScreen mainScreen].bounds.size.width
#define kScreenHeight [UIScreen mainScreen].bounds.size.height
//內存管理的安全釋放 #define SAFE_RELEASE(x) x=nil
//判斷系統版本是否大於等於ios8
#define IOS_VERSION_7_OR_LATER (([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0)? (YES):(NO))
//判斷是否是ARC
//ARC
#if __has_feature(objc_arc)
//是用arc編碼
#else
//是用手動內存管理
#endif
//判斷是iPhone真機(Device)還是模擬器(Simulator)
#if TARGET_OS_IPHONE
//針對真機進行編碼
NSLog(@"iPhone Device");
#elif TARGET_IPHONE_SIMULATOR
//針對模擬器編碼
NSLog(@"iPhone Simulator");
#endif
//使用地區文字
#define CurrentLanguage ([[NSLocale preferredLanguages] objectAtIndex:0])
關於NSLocale 想了解的參考:http://my.oschina.net/hmj/blog/126355
http://blog.csdn.net/mamong/article/details/27077827
//GCD
#define BACK(block) dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), block)
#define MAIN(block) dispatch_async(dispatch_get_main_queue(),block)
//userDefault
#define USER_DEFAULT [NSUserDefaults standardUserDefaults]
//設置圖片
#define ImageNamed(_pointer) [UIImage imageNamed:[UIUtil imageName:_pointer]]
//隨機顏色及透明度
#define RGBACOLOR(r,g,b,a) [UIColor colorWithRed:(r)/255.0f green:(g)/255.0f blue:(b)/255.0f alpha:(a)]
//登錄API
#define APILogin [APIURL stringByAppendingString:@"Login"]
詳細分類常用宏定義:http://my.oschina.net/leejan97/blog/354904
const常量與宏定義的區別:http://blog.csdn.net/love_gaohz/article/details/7567856
多用類型常量,少用宏預處理:http://book.51cto.com/art/201403/432132.htm
參考:http://my.oschina.net/leejan97/blog/224011
http://blog.csdn.net/wangqiuyun/article/details/8104698
http://www.cocoachina.com/industry/20140122/7738.html