美文网首页
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 - 《系统宏》宏,预处理命令

    在ios中使用预处理命令[C语言的特殊命令] 1.宏定义 #define 与 #undef 2.带参数宏定义 3....

  • 10/19

    今天老师讲了预处理命令,宏定义分为无参宏定义,带参宏定义和条件编译。宏定义包括宏名和宏展开,和函数相比预处理有很多...

  • 2018-05-31

    预处理命令: 宏 不带参数的的宏定义 不是c语句 PI宏展开宏明 可以层层置换 简单的字符串替换 带参数的宏 不是...

  • 10.19

    今天主要讲了预处理 主要是预处理的概念和预处理命令的使用 包括宏定义“文件包含”处理条件编译等等宏定义是老师重...

  • C语言学习之八——预处理

    预处理在C语言中,以“#”号 开头的是预处理命令。例如,如包含命令#include ,宏定义 命令#define...

  • C语言预处理指令

    预处理指令 宏定义 宏定义会在预处理的时候, 用宏定义的值来替换宏的名称 格式: #define 宏名称 宏值 应...

  • 预处理宏( Preprocessor Macros)

    C中的预处理宏宏定义就属于预处理命令的一种。宏:C 语言标准允许在程序中用一个标识符来表示一个字符串。标识符就是宏...

  • C语言预处理命令的使用

    预处理命令 定义和使用宏 没有参数的宏 输出如下: 带参数的宏 输出和上一节相同。 可选参数 使用省略号...表示...

  • iOS开发 宏定义

    在iOS开发中,合理的使用宏定义可以使我们少些好多代码 C预定义宏DATE //进行预处理的日期(“Mmm dd...

  • Preprocessor

    预处理命令(主要有三种) 宏定义 文件包含 条件编译 宏定义如: 由于 C++已增加了 const 语句定义常量,...

网友评论

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

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