iOS 中 extern const static define

  • 前言
很多人搞不懂这种问题,打算整理一篇文章当自己忘记的时候,也可以翻来看看
  • 目录
1.  extern const static define 用法
2.  深层次理解 extern const static define

一 . extern const static 用法
const 一般用来定义一个常量

// 不可以被修改
NSString* const text = @"Text"; 
// 可以被修改
NSString const *text = @"Text";
  • extern
    外部变量,引用其他类的全局变量
.m 文件中
NSString* const scheme = @"Scheme";

.h 文件中
extern NSString* const scheme;

在其他文件中可以直接访问。
或者采用下面这种写法:

在一个文件中
NSString * const str = @"123";
在另外一个文件中引用的时候:
extern NSString* str;
  • static 修饰的变量是一个私有的全局变量
    作用: 延长局部变量的生命周期,程序结束时才会销毁
例如: 在一个文件中声明:
static NSString* const scheme = @"Scheme";
在另外一个文件中声明 :
extern NSString* scheme;

编译阶段不会报错,但是在运行期,会报如下错误:

E9C6FC8D-45E3-4A0F-9472-853FD6AB1B5D.png
  • define
    是一条预编译指令,编译器在编译阶段会将所有使用到的地方简单的进行替换
用法:
#define SCHEME 100

二 . 深层次理解 extern const static define

const 和 define

相同点:
const 和 define 都能定义一个常量,都能实现修改值修改一次,
所有用上该变量的值都能做到同步的修改,
这样代码就变得易于维护,提高代码的效率。
不同点:
const 给出的是对应内存的地址,所以const定义的常量在程序运行过程中只有一份拷贝
而 #define 定义的常量在内存中有若干个拷贝
宏能做到 const 做不到的事情:
1. 宏能定义函数
2. 宏能根据传入的参数生成字符串
#define string(str1,str2) #str1#str2
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容