宏定义大总结

2018-08-22  本文已影响0人  code_牧轩

一:用法 

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

上一篇下一篇

猜你喜欢

热点阅读