const
const的意思是常量,用const修饰的基本变量或者指针变量是只读的,不可修改的。
NSString *const userName = @"hjj";
如果后面有userName = @"zr";这样的错误的。
int const *p // *p只读 ;p变量 int * const p // *p变量 ; p只读 const int * const p //p和*p都只读 int const * const p //p和*p都只读
const 和宏定义#define的区别
* "const简介":之前常用的字符串常量,一般是抽成宏,但是苹果不推荐我们抽成宏,推荐我们使用const常量。
* "执行时刻":宏是预编译(编译之前处理),const是编译阶段。
* "编译检查":宏不做检查,不会报编译错误,只是替换,const会编译检查,会报编译错误。
* "宏的好处":宏能定义一些函数,方法。 const不能。
* "宏的坏处":使用大量宏,容易造成编译时间久,每次都需要重新替换。
static
static 静态变量
修饰局部变量:
1.可以延长局部变量的声明周期,程序结束才会销毁。
2.局部变量只会生成一份内存,而且只会初始化一次。
3.改变局部变量作用域。
#pramark --事例1
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
int i = 0;
i++;//目的是每点击一次就i自加
NSLog(@"%d",i);
}
但是如果这样的话是不会自加的,因为每次点击都会创建一个局部变量
#pramark -- 事例2
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
static int i = 0;
i++;//目的是每点击一次就i自加
NSLog(@"%d",i);
}
事例2只初始化一次i,而且是同一份内存,所以i是可以自加的。
修饰全局变量:
只能在本文件中访问
extern是外界可以访问
.h 文件声明
extern NSString * const mk;//用extern修饰的变量是不能在.h赋值的,必须在.m实现,而且是一定要实现,不然的话会编译不成功。
.m 文件实现
NSString *const mk = @"mk";
这样外部类就可以访问mk这个变量了,类似于在.h的属性,外界可以访问属性。