浅谈iOS中的const 、static、宏和extern

156 阅读1分钟

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

静态变量只会被初始化依次,除此之外修饰全局变量和非全局变量有不同的作用。

  • 对于全局变量,会限制其作用域,只在当前源文件内生效
  • 对于局部变量,会改变其生命周期,使被修饰的变量在局部作用域结束后,不会被销毁回收