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