iOS開發系統一些常見的巨集
1、NS_FORMAT_FUNCTION(1,2)
NS_FORMAT_FUNCTION(1,2) NS_FORMAT_FUNCTION 展開為一個方法 __attribute__,它會告訴編譯器在索引1處的引數是一個格式化字串,而實際引數從索引2開始。這將允許編譯器檢查格式化字串而且會像 NSLog() 和 -[NSString stringWithFormat:] 一樣輸出警告資訊。
2、方法後面有一個nil
NS_REQUIRES_NIL_TERMINATION 展開為一個方法 一般後面有一個nil 比如:初始化UIAlertView後面就有一個NS_REQUIRES_NIL_TERMINATION
3、判斷Block塊是否有用
#if NS_BLOCKS_AVAILABLE
// 這裡使用block
#endif
4、方法在Mac和iOS上使用的最低版本
NS_AVAILABLE(10_5, 2_0) 前面10_5代表Mac系統,後面2_0代表iOS系統,它會告訴編譯器該列舉在xos10.5及以上和iOS2.0及以上可以使用,如果系統的版本低於提示版本,程式在編譯時就會crash。跟在方法後面
NS_AVAILABLE_IOS(7_0) 7_0代表iOS系統,它會告訴編譯器該列舉在iOS7.0及以上可以使用,如果系統的版本低於提示版本,程式在編譯時就會crash。跟在方法後面
5、列舉在Mac和iOS上使用的最低版本
NS_ENUM_AVAILABLE(10_5, 2_0) 前面10_5代表Mac系統,後面2_0代表iOS系統,它會告訴編譯器該列舉在xos10.5及以上和iOS2.0及以上可以使用,如果系統的版本低於提示版本,程式在編譯時就會crash。跟在列舉後面
NS_ENUM_AVAILABLE_IOS(7_0) 7_0代表iOS系統,它會告訴編譯器該列舉在iOS7.0及以上可以使用,如果系統的版本低於提示版本,程式在編譯時就會crash。跟在列舉後面
6、方法在哪個版本棄用了
NS_DEPRECATED_IOS(2_0,6_0) 前面2_0代表iOS系統,表示這個方法被引用時的iOS版本,後面6_0代表iOS系統,表示這個方法被棄用時的iOS版本。被棄用並不是指這個方法就不存在,它會告訴使用者去使用新方法
7、方法被棄用了
DEPRECATED_ATTRIBUTE 它會告訴編譯器該方法被棄用了
DEPRECATED_MSG_ATTRIBUTE(s) 它會告訴編譯器該方法被棄用了,後面s 代表提示
__deprecated_msg(_msg) 它會告訴編譯器該方法被棄用了,後面_msg代表提示
8、判斷當前裝置是模擬器還是真機
#if TARGET_IPHONE_SIMULATOR
// 模擬器
#elif TARGET_OS_IPHONE
// 真機
#endif
9、判斷當前裝置系統
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_8_0
// 這裡寫裝置系統大於8.0 以上的程式碼
#else
// 這裡寫裝置系統小於8.0以上的程式碼
#endif
#if __IPHONE_OS_VERSION_MIN_REQUIRED <= __IPHONE_7_0
// 這裡寫裝置系統小於7.0以上的程式碼
#else
// 這裡寫裝置系統大於7.0以上的程式碼
#endif
10、判斷當前App是否是ARC模式
#if !__has_feature(objc_arc)
#error app is ARC only. Either turn on ARC for the project or use -fobjc-arc flag
#endif
11、判斷當前App使用id或者instancetype
#ifndef W_INSTANCETYPE
#if __has_feature(objc_instancetype)
#define W_INSTANCETYPE instancetype
#else
#define W_INSTANCETYPE id
#endif
#endif
12、關於巨集定義中的#和##的說明
#有兩個作用:
①.將變數直接轉化為相應字面量的C語言字串 如a=10 #a會轉換為“a”
②.連線兩個C字串
##的常用用處是連線,它會將在它之前的語句、表示式等和它之後的語句、表示式等直接連線
#define combine(a, b) a##b 比如:combine(10, 2222) 輸出 102222