const修饰位置不同,代表什么?
1.const NSString *HSCoder = @"汉斯哈哈哈";
2.NSString const *HSCoder = @"汉斯哈哈哈";
3.NSString * const HSCoder = @"汉斯哈哈哈";
1.const NSString *HSCoder = @"汉斯哈哈哈";
"*HSCoder"不能被修改, "HSCoder"能被修改
2.NSString const *HSCoder = @"汉斯哈哈哈";
"*HSCoder"不能被修改, "HSCoder"能被修改
3.NSString * const HSCoder = @"汉斯哈哈哈";
"HSCoder"不能被修改,"*HSCoder"能被修改
注意:1和2其实没什么区别
常量区分
全局常量:不管你定义在任何文件夹,外部都能访问
NSString *const HSCoder = @"全局常量";
局部常量:用static修饰后,不能提供外界访问
static NSString *const HSCoder = @"当前文件的全局常量";
- const与宏的区别
编译时刻
const 是编译阶段,宏是预编译.编译检查
const会编译检查,会报编译错误.宏不做检查,不会报编译错误,只做替换.宏的好处
宏能定义一些函数,方法,const不能.宏的坏处
使用大量额度宏,容易造成编译的时间久,每次都需要重新替换.
static
static的作用:
修饰局部变量:
- 延长局部变量的生命周期,程序结束才会销毁。
- 局部变量只会生成一份内存,只会初始化一次。
- 改变局部变量的作用域。
修饰全局变量:
- 只能在本文件中访问,修改全局变量的作用域,生命周期不会改
- 避免重复定义全局变量.
extern
- extern的作用: 只是用来获取全局变量(包括全局静态变量)的值,不能用于定义变量.
- extern的原理: 先在当前文件查找有没有全局变量,没有找到,才会去其他文件查找。
联合使用
static
与const
:声明一个静态的全局只读变量,(仅当前文件可访问且只读).
static NSString * const key = @"name";