一:用法
1.FOUNDATION_EXPORT 、#define 都是定义宏定义的
2.const 定义常量字符串
FOUNDATION_EXPORT NSString*constkMyConstantString;
宏与const区别:
1.编译时刻不同,宏属于预编译,const属于编译时刻
2.宏能定义代码,const不能,多个宏对于编译会相对时间较长,影响开发效率,调试过慢,const只会编译一次,缩短编译时间。
3.宏不会检查错误,const会检查错误
二:条件语句
#define定义一个预处理宏
#undef 取消宏的定义
#include 包含文件命令
#ifdef 断某个宏是否被定义, 若已定义, 执行随后的语句
#ifndef 与#ifdef相反, 判断某个宏是否未被定义
#elif 若#if, #ifdef, #ifndef或前面的#elif条件不满足, 则执行#elif之后的语句, 相当于C语法中的else-if
#else 与#if, #ifdef, #ifndef对应, 若这些条件不满足, 则执行#else之后的语句, 相当于C语法中的else
#endif #if, #ifdef, #ifndef这些条件命令的结束标志.(PS: 你会发现#if和#ifdef有点类似.)
defined 与#if, #elif配合使用, 判断某个宏是否被定义
#line 标志该语句所在的行号
# 将宏参数替代为以参数值为内容的字符窜常量
## 将两个相邻的标记(token)连接为一个单独的标记
#pragma 说明编译器信息#warning显示编译警告信息
#error 显示编译错误信息
\ 回车连接符
另附上一段大神的宏定义:
NS_ASSUME_NONNULL_BEGIN && NS_ASSUME_NONNULL_END
在这两个宏之间的代码,所有简单指针对象都被假定为nonnull,因此我们只需要去指定那些nullable的指针
UIKIT_EXTERN
extern这个是定义字符串 变量 比#define更加的高效 .但是UIKIT_EXTERN是根据是否是C语言宏定义,根据语言区分 ,比extern更加的高效
UIKIT_EXTERNNSString*constUIApplicationInvalidInterfaceOrientationExceptionNS_AVAILABLE_IOS(6_0) __TVOS_PROHIBITED;
NS_ENUM_AVAILABLE_IOS
从单词的字面可以看出使用这个宏说明这个枚举开始IOS的版本,NS_ENUM_AVAILABLE_IOS(2_0) 代表>=2.0开始
NS_ENUM_DEPRECATED_IOS
代表枚举类型已经过时的API 第一个参数是开始的时候,第二个参数是过时的时候 NS_ENUM_DEPRECATED_IOS(2_0,7_0) 代表开始于IOS2.0废弃于IOS7.0 也就是>=2.0 <=7.0
__TVOS_PROHIBITED
代表这个枚举或者类,方法,参数在TVOS系统上面不能使用
NS_CLASS_AVAILABLE_IOS
NS_CLASS_AVAILABLE_IOS(2_0)@interfaceUIApplication:UIResponder
NS_EXTENSION_UNAVAILABLE_IOS
标记IOS插件不能使用这些API,后面有一个参数,可以作为提示,用什么API替换
+ (UIApplication*)sharedApplicationNS_EXTENSION_UNAVAILABLE_IOS("Use view controller based solutions where appropriate instead.");
NS_REQUIRES_SUPER
字面上必须继承父类的方法(有待考证)
SDK_HIDE_TIDE
NS_DESIGNATED_INITIALIZER
网友评论