写在前面
在iOS开发中,经常用到宏定义,或用const修饰一些数据类型
那么,到底使用哪一种会更合适,他们之间有什么区别
static
修饰局部变量
让局部变量只初始化一次
局部变量在程序中只有一份内存
并不会改变局部变量的作用域,仅仅是改变了局部变量的生命周期(只到程序结束,这个局部变量才会销毁)
修饰全局变量
全局变量的作用域仅限于当前文件
const
没有const修饰的指针
指针p和*p都能被修改//
static和const联合使用
static将一个全局变量变成局部变量
const将一个局部变量变成局部常量
使用static const 与 #define
相同点
都不能再被修改
一处修改,其它都改了
不同点
static const修饰变量只有一份内存
宏定义,只是简单的替换,每次使用都需要创建一份内存
结论
使用static const修饰更加高效,在同一个文件内可以使用static const取代#define
const实际开发的应用
一般会先新建ZMJConst.h文件专门存放常量的引用//
引用某变量,如果没有使用const修饰,就不能直接在编译的时候就能检测是否修改了
ZMJRedexternconstCGFloatZMJRed;externNSString*constZMJName;
可以模仿系统UIKIT_EXTERN来代替extern,逼格更高!