1⃣️.const和宏的区别
宏是预编译,const是编译时刻,只会编译一次;宏不会检查错误,const会检查错误,常用的字符串通常使用const修饰;宏的优点是可以定义一段代码,如果一个文件里面宏太多,会造成编译时间过长.但是其实定义宏并不会消耗内存,只会分配一次内存地址.
2⃣️.const的使用:只能修饰变量(基本数据类型,指针变量 (int *),对象变量),const修饰的变量,仅仅是修饰相邻右边的变量,表示只读,不可以修改.
int const a = 10
,a的值不可修改,但是仍然是变量,是个只读变量.
const int a = 10
,a也是只读变量
用const修饰指针变量
int a = 10;
int *const p = &a //p:只读变量, *p:变量
const int *p = &a //*p:只读变量, p:变量
int const *p = &a //*p:只读变量,p:变量
int const * const p = &a //*p:只读,p:只读
const int *const p = &a //*p:只读,p:只读
3⃣️.const的使用场景
1.全局只读变量NSString *const name = @"little prince"
2.方法中定义个只读参数;-(void)test:(NSString * const)name
方法中就不可以修改name的值了.
4⃣️.static
1:修饰局部变量,会延长局部变量的生命周期,只要程序运行,局部变量一直存在,而且只会分配一次内存.
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{ // static:修饰的变量,程序一运行就会分配一次内存
static int i = 0;
i++;
NSLog(@"%d",i);//i的值一直增加
}
2.修饰全局变量:只会修饰全局变量的作用域,表示只能是当前类内中可以使用.
🈚️.extern
只能申明一个变量,不能定义变量,修饰的变量不能初始化.一般用于申明全局变量,全局变量和VC的加载没有关系.比如在ViewController.m
中申明一个全局 int i = 3,在AppDelegate.m
中extern int i.并且打印i可以得到值3.
6⃣️.static 和const修饰全局变量,
static修饰全局变量,修改作用域,在当前文件中使用,const表示变量只读的.联合修饰时静态全局只读变量.Static NSString * const name = @"rose";
7⃣️.extern和const联合使用,全局的只读变量
extern NSString * const name = @"rose"
8⃣️.我们可以创建一个文件,在.m中定义全局变量.需要在.m中导入Foundation框架.然后写入全局变量,防止重复使用变量名.可以用UIKIT_EXTERN来代替extern,显得高大上点.
以上😄