IOS 基础-define、const、extern、全局变量
const 与 宏的区别 :
【C基础】#define宏定义中的#,##,@#,\ 这些符号的神奇用法
> 常用 字符串/常见基本变量 使用定义宏
> 苹果一直推荐我们使用const,而不是宏 ;swift废弃使用宏
1. 编译时刻不同宏:预编译 const: 编译
2. 编译检查宏: 没有编译检查 const:有编译检查
3. 宏的好处: 定义函数/方法,const不可以(swift实现的话,定义全局函数)
4. 宏的坏处: 大量使用宏,会导致预编译时间过长
blog: 大量使用宏,会导致内存暴增(验证后是谣言)
const 作用: 1.修饰右边基本变量或者指针变量eg:int a int*p
2. 被const 修饰的变量是不可变的,只读(可以防止被改动)
两种写法:
const int a = 3;
int const a = 3;
int a = 3;
int const *p = &a;
*p =8;(错误 因为const修饰后,p值不能修改,它会指向a的值)
static:
1. <1>让局部变量只初始化一次
<2>局部变量在程序中只有一份内存
<3>并不会改变局部变量的作用域,仅仅是改变了局部变量的生命周期(只到程序结束,这个局部变量才会销毁)
2. static修饰全局变量,全局变量的作用域仅限于当前文件.保证全局变量安全,外界不可访问与修改.
例子:
static NSString*const name =@"kris";//表示这个全局变量只可以在本类中使用,并且值不能修改
extern:
<1>要想访问全局变量可以在前面加extern
<2>extern修饰的变量没有真正内存
1. 声明一个外部全局变量,注意extern只能用于声明,不能用于定义
2. 工作原理: 先会在当前文件下查找有没有对应全局变量,如果没有,才回去其他文件查找
应用:
external + const 开发中应用最多, 开发中规定: 全局变量不能定义在自己类中,自己创建一个全局的文件去管理全局的一些东西.如下图所示: