const
- 用来修饰右侧的变量,将右侧变量设置为只读类型。
注意:const 主要修饰右侧的变量,被修饰的右侧整体为只读类型,不能更改,如int const * p 则* p = 1 会报错,但p=1不会报错 ,若 int * const p 则p = 1 会报错,而*p 不会报错。
int a = 1
int const *p = &a //常量指针 *p无法修改,但p可以修改
int * const p = &a //常量值 p 无法修改 *p 可以修改
const int * const p = &a //指针和值都不可以修改
NSString * const string = @"s";//iOS常用
string = @"z" //会报错,因为string 是常量,无法被修改
宏定义
工作中经常纠结是使用常量还是宏定义,苹果在官方文档中是建议使用常量的,因为大量使用宏定义,会使包大小增加。
- 宏没有类型,不做类型检查,仅仅是展开替换文本
- 预编译,在编译之前在处理器中进行文本替换
- 不会占用内存
- 优点:使用宏可以定义一些函数方法。
- 缺点:过多使用会增加编译时间。
static
静态变量只会被初始化依次,除此之外修饰全局变量和非全局变量有不同的作用。
- 对于全局变量,会限制其作用域,只在当前源文件内生效
- 对于局部变量,会改变其生命周期,使被修饰的变量在局部作用域结束后,不会被销毁回收