这几个常量好好整理一下
一、const与宏
1、宏常见用法:
(1)、常见的字符串抽成宏
(2)、常见的代码抽成宏
2、const常量(也能修饰变量):
(1)、当有字符串常量的时候,苹果推荐使用const
3、const和宏的区别:
(1)、编译时刻:宏是预编译(#在c语言中表示预编译) const在编译时刻编译
(2)、编译检查:宏不会检查错误 const会检查错误
(3)、宏的好处:可以定义代码
(4)、宏的坏处:编译时间过长,因此常用的字符串用const修饰,代码只能用宏
注意:宏不会消耗过多内存,定义一个只会分配一份内存
4、const作用:
(1)、只修饰右边的第一个变量(只能修饰变量:基本变量、指针变量、对象变量)
(2)、const修饰的变量只读
//const修饰基本变量
int const i = 10;
const int j = 10;
// i = 20;//只读
//const修饰指针变量
int a = 10;
int b = 20;
int *const pa = &a;//pa只读变量,*pa变量
int const *pb = &b;//*pb只读变量,pb变量
const int *pc = &a;//*pc只读变量,pc变量
int const * const pd = &b;//*pd只读变量,pd只读变量
const int * const pe = &a;//*pd只读变量,pd只读变量
// pa = &b;
// *pa = 30;
//const修饰对象变量
NSString * const name = @"name";
//name = @"dashabi";
5、const开发中使用:
(1)、用来定义一个全局只读变量
(2)、在方法中一般定义只读参数
//修饰对象
- (void)test:(NSString * const)name{
//在函数中实现只读
//name = @"321";
}
//修饰基本变量
- (void)test2:(int const)a{
}
//修饰指针变量
- (void)test3:(int const *)p{
}
二、static和extern
1、static
(1)、修饰局部变量
a、延长这个局部变量的生命周期,只要成员运行,局部变量就会一直存在
b、局部变量只会分配一次内存
(2)、修饰全局变量
a、只会修改全局变量的作用域,表示只能是当前文件类使用
//定义静态全局变量
static int i = 100;
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
//static修饰的变量,只会分配一次内存,只会在第一次运行的时候分配,不会每次运行都分配
static int i = 0;
i ++;
NSLog(@"%d",i);
}
2、extern / UIKIT_EXXTERN
(1)、声明一个全局变量,不能定义变量
注意:extern修饰的变量不能初始化
(2)、使用场景:一般用于声明全局变量
当在别的类需要使用改类定义的全局变量的时候,只需言在别的类用extern声明即可
extern int aaa;
三、static和const一起使用
static和const一起使用表示修饰静态全局只读变量,只能在当前文件夹使用
//const只修饰右边的第一个变量,所以要这样写
static NSString * const strings = @"hmp";