最新项目上线,抽空写下博客,记录一些基础知识
1.const和宏 区别
const:常量
const:当有字符串常量的时候,苹果推荐我们使用const
const与宏的区别
1.编译时刻: 宏:预编译 const:编译时刻
2.编译检查: 宏:不会检查错误 const:会检查错误
3.宏的好处:可以定义代码
4.宏的坏处:编译时间过长,因此常用的字符串通常使用const修饰
注意:经常使用宏会造成内存不段增加,每次使用宏,都会分配一个内存
// 全局变量(const)
NSString *const XMGAccountKey = @"account";
// #:预编译(宏)
#define XMGUserDefaults [NSUserDefaults standardUserDefaults]
2.const 修饰类型
1.仅仅是用来修饰右边的变量(只能修饰变量:基本变量,指针变量,对象变量)
2.const修饰的变量,表示只读
const书写规范:一定要放在变量的左边
3.const使用地方
// const放*前面约束参数,表示*a只读
// 只能修改地址a,不能通过a修改访问的内存空间
- (void)test:(const int * )a{
// *a = 20;
}
// const放*后面约束参数,表示a只读
// 不能修改a的地址,只能修改a访问的值
- (void)test1:(int * const)a{
int b;
// 会报错
a = &b;
*a = 2;
}
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
int a = 10;
// 需求1:提供一个方法,这个方法的参数是地址,里面只能通过地址读取值,不能通过地址修改值。
// 这时候就需要使用const,约束方法的参数只读.
[self test:&a];
// 需求2:提供一个方法,这个方法的参数是地址,里面不能修改参数的地址。
[self test1:&a];
}
4.static和extern 作用
static作用:
1.修饰局部变量
* 延长这个局部变量的生命周期,只要程序运行,局部变量就会一直存在
* 局部变量只会分配一次内存,为什么?用static修饰的代码,只会在程序一启动就会执行,以后就不会在执行
2.修饰全局变量
* 只会修改全局变量的作用域,表示只能是当前文件内使用
extern作用:
1.声明一个变量,不能定义变量
注意:extern修饰的变量不能初始化
使用场景,一般用于声明全局变量
extern工作原理
:
先在当前文件查找有没有全局变量,没有找到,才会去其他文件查找。
// 全局变量:只有一份内存,所有文件共享,与extern联合使用。
int a = 20;
// static修饰全局变量
static int age = 20;
- (void)test{
// static修饰局部变量
static int age = 0; age++;
NSLog(@"%d",age);
}
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
[self test];
[self test];
extern int age;
NSLog(@"%d",age);
}