美文网首页
iOS - 《系统宏》宏,预处理命令

iOS - 《系统宏》宏,预处理命令

作者: baiwulong | 来源:发表于2017-12-19 11:25 被阅读18次

    在ios中使用预处理命令[C语言的特殊命令]

    1.宏定义

    #define 与 #undef

    #define ** —>表示进行宏**定义
    #undef **->表示结束**宏定义
    

    2.带参数宏定义

    格式: #define 宏名称(参数1,参数2…) 操作字符串
    \#define add(a,b,c) a+b+c; 
    note:建议将宏定义中的参数用括号括起来,假如宏定义返回一个数值型,建议用括号括起来,eg,
    (错误)#define GIRTH(r) 3.14*2*r ,调用时:GIRTH(10+2) —>3.14*2*10+2,这结果明显不对;
    (正确)#define GIRTH(r) (3.14*2*(r) ),调用时:GIRTH(10+2) —>3.14*2*(10+2),这结果正确;
    

    3.使用执行条件宏,利用宏进行选择性编译

    #ifdef ,#ifndef, #if , #elif, #else ,#endif
    格式:
    #ifdef 宏名称 (表示如果存在宏***,就会执行该部分代码)
    //任意语句
    #endif

    #if 表达式
        //任意语句
    #elif 表达式
        //任意语句
    #else 
        //任意语句
    #endif
    

    4.引入文件,#include 与 #import

    #include指定源代码插入到当前源码的指定位置
    #import 更加智能,可以避免重复导入文件
    

    /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

    系统宏NS_ASSUME_NONNULL_BEGIN & NS_ASSUME_NONNULL_END

    /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

    两个宏:NS_ASSUME_NONNULL_BEGINNS_ASSUME_NONNULL_END。在这两个宏之间的代码,所有简单指针对象都被假定为nonnull,因此我们只需要去指定那些nullable的指针。
    Swift中存在Option类型,也就是使用声明的变量。但是OC里面没有这个特征,因为在XCODE6.3之后出现新的关键词定义用于OCSWIFT时候可以区分到底是什么类型.

    __nullable && ___nonnull
    __nullable指代对象可以为NULL或者为NIL
    __nonnull指代对象不能为null
    当我们不遵循这一规则时,编译器就会给出警告。

    屏幕快照 2017-12-19 11.04.52.png

    /
    /
    /
    /
    /
    /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

    系统宏:NS_UNAVAILABLE/NS_DESIGNATED_INITIALIZER

    NS_UNAVAILABLE:禁止原来的初始化构造方法;
    NS_DESIGNATED_INITIALIZER:重新指定构造方法;
    /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

    Objective-C 中主要通过NS_DESIGNATED_INITIALIZER宏来实现指定构造器的。这里之所以要用这个宏,往往是想告诉调用者要用这个方法去初始化(构造)类对象。通过NS_UNAVAILABLE宏进行消除警告

    如下图所示:
    重新指定初始化构造器

    屏幕快照 2017-12-19 11.09.58.png
    出现编译警告
    屏幕快照 2017-12-19 11.10.35.png

    处理方法:通过使用NS_UNAVAILABLE禁止原来的 与NS_DESIGNATED_INITIALIZER指定新的

    屏幕快照 2017-12-19 11.18.34.png
    这时外部调用init会报错,因为init已经被禁止了
    屏幕快照 2017-12-19 11.18.52.png

    /
    /
    /
    /
    /
    /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

    系统宏: DEPRECATED_ATTRIBUTE

    标识过期方法函数.
    /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

    用来标识过期方法API的

    - (void)method1:( NSString *)string __attribute__((deprecated("使用#method2")));
    - (void)method12 DEPRECATED_ATTRIBUTE; //DEPRECATED_ATTRIBUTE是系统的宏
    

    相关文章

      网友评论

          本文标题:iOS - 《系统宏》宏,预处理命令

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