extern
只是用来获取全局变量(包括全局静态变量)的值,不能用于定义变量
extern工作原理:先在当前文件查找有没有全局变量,没有找到,才会去其他文件查找。
static
修饰局部变量:
1.延长局部变量的生命周期,程序结束才会销毁。
2.局部变量只会生成一份内存,只会初始化一次。
3.改变局部变量的作用域。
修饰全局变量
1.只能在本文件中访问,修改全局变量的作用域,生命周期不会改
2.避免重复定义全局变量
3..pch生成的全局变量是每个文件一份,所以修改所在文件的全局变量并不能跨文件修改
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
//声明一个局部变量i
static int i = 0; //每次点击view来到这个方法时让i自增
i ++; //打印结果--每次打印出来的结果都为1
NSLog(@"i=%d",i);
}
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{ //声明一个局部变量i
static int i = 0; //每次点击view来到这个方法时让i自增
i ++; //打印结果--1,2,3....
NSLog(@"i=%d",i);
}
define
1>宏定义是在预编译里进行文本替换
2>没有类型区分,不会进行代码检查
3>大量使用宏定义会使编译的二进制文件增大,宏定义占用的只是代码段而已,只会分配一块内存空间
const
1.const仅仅用来修饰右边的变量(基本数据变量p,指针变量*p)。
2.被const修饰的变量是只读的。
static const NSString *Coder1 = @"xxx";//局部常量:用static修饰后,不能提供外界访问
const NSString *Coder2 = @"xxx";//全局常量:不管你定义在任何文件夹,外部都能访问
NSString const *Coder3 = @"xxx"; //const右边的总不能被修改:
NSString * const Coder4 = @"xxx"; //const右边的总不能被修改:
#import <UIKit/UIKit.h>
@interface ViewController : UIViewController
//只给外界暴露出一个制只读变量money
extern NSString *const money;
@end
网友评论