美文网首页
宏定义大总结

宏定义大总结

作者: code_牧轩 | 来源:发表于2018-08-22 15:39 被阅读0次

    一:用法 

    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

    相关文章

      网友评论

          本文标题:宏定义大总结

          本文链接:https://www.haomeiwen.com/subject/epieiftx.html