const与宏区别:
1.编译时刻: 宏:预编译 const:编译
2.编译检查: 宏不会做编译检查 const会
3.宏好处: 宏可以定义函数和方法 const不行
4.宏坏处: 大量使用宏,会导致预编译时间过长
宏:在开发中会把一些常用的变量的值定义成宏
但是苹果不太推荐我们使用宏,推荐我们使用const
/*
const作用:
1.用于修饰右边变量(基本变量,指针变量)
2.被const修饰变量只读(普通的变量是可读可写的)
*/
// 面试题
int * const p1; // p1:只读 *p1:变量
const int *p2; // p2:变量 *p2:只读
int const *p3; // p3:变量 *p3:只读
int const * const p4; // p4:只读 *p4:只读
const int * const p5; // p5:只读 *p5:只读
/*
开发中const使用场景
1.const替换宏,宏:在开发中将常用字符串或者基本数据定义成宏 -> const
2.修饰方法的参数,让方法的参数只读(即用const直接修饰方法的参数参数)
*/
—————————————————————————————————————————————————————————————————————————————
/*
static作用:
1.修饰局部变量,只要被static修饰局部变量,这个局部变量的生命周期就会延长,将局部变量从栈转移到静态区中(整个app运行过程中都在),作用域不变
分配时刻:程序一运行的时候就会分配内存
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
// 运行到这一行的时候 才去分配内存 √
static int i = 0;
i++;
NSLog(@"%d",i);
}
/*
static应用场景:
当某个方法的调用频率非常高, 而该方法中更有些变量的值是固定不变的
那么这个时候就可以使用static来修饰该变量, 让该变量只开辟一次存储空间
这样可以提高程序的效率和性能
*/
2.修饰全局变量,只要被static修饰全局变量,这个全局变量只能在当前文件下使用
extern作用:
1.仅仅是用来声明外部全局变量
注意点:extern不能用来定义变量(注意:声明变量和定义变量的区别)
int a; ——> 这是声明变量a
int a = 0; ——>这是定义一个变量a
*/
—————————————————————————————————————————————————————————————————————————————
/*
static和const联合使用
static:修饰全局变量,全局变量只能在当前文件下使用
const:被它修饰的变量,是只读的变量
*/
static NSString * const isOn = @"isOn”;//isOn字符串对象是只能在当前文件下访问的只读的字符串对象(指针的指向不能改变),不能重新给isOn赋值(指针的指向发生改变)
—————————————————————————————————————————————————————————————————————————————
/*
开发中如果使用全局变量,最容易导致冲突
开发规范:只要定义全局变量,都不能在自己的类中定义,一般开发中,我们会搞一个公用文件去定义全局变量
*/
网友评论