1. 程式人生 > >iOS開發系統一些常見的巨集

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